hessian2input.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,784 行 · 第 1/4 页

JAVA
2,784
字号
      return (0x100 * read() + read()) != 0;          case DOUBLE_FLOAT:      {	int f = parseInt();	return Float.intBitsToFloat(f) != 0;      }          case 'D':      return parseDouble() != 0.0;          case 'N':      return false;          default:      throw expect("boolean", tag);    }  }  /**   * Reads a short   *   * <pre>   * I b32 b24 b16 b8   * </pre>   */  public short readShort()    throws IOException  {    return (short) readInt();  }  /**   * Reads an integer   *   * <pre>   * I b32 b24 b16 b8   * </pre>   */  public final int readInt()    throws IOException  {    //int tag = _offset < _length ? (_buffer[_offset++] & 0xff) : read();    int tag = read();    switch (tag) {    case 'N':      return 0;          case 'F':      return 0;          case 'T':      return 1;      // direct integer    case 0x80: case 0x81: case 0x82: case 0x83:    case 0x84: case 0x85: case 0x86: case 0x87:    case 0x88: case 0x89: case 0x8a: case 0x8b:    case 0x8c: case 0x8d: case 0x8e: case 0x8f:          case 0x90: case 0x91: case 0x92: case 0x93:    case 0x94: case 0x95: case 0x96: case 0x97:    case 0x98: case 0x99: case 0x9a: case 0x9b:    case 0x9c: case 0x9d: case 0x9e: case 0x9f:          case 0xa0: case 0xa1: case 0xa2: case 0xa3:    case 0xa4: case 0xa5: case 0xa6: case 0xa7:    case 0xa8: case 0xa9: case 0xaa: case 0xab:    case 0xac: case 0xad: case 0xae: case 0xaf:          case 0xb0: case 0xb1: case 0xb2: case 0xb3:    case 0xb4: case 0xb5: case 0xb6: case 0xb7:    case 0xb8: case 0xb9: case 0xba: case 0xbb:    case 0xbc: case 0xbd: case 0xbe: case 0xbf:      return tag - INT_ZERO;      /* byte int */    case 0xc0: case 0xc1: case 0xc2: case 0xc3:    case 0xc4: case 0xc5: case 0xc6: case 0xc7:    case 0xc8: case 0xc9: case 0xca: case 0xcb:    case 0xcc: case 0xcd: case 0xce: case 0xcf:      return ((tag - INT_BYTE_ZERO) << 8) + read();            /* short int */    case 0xd0: case 0xd1: case 0xd2: case 0xd3:    case 0xd4: case 0xd5: case 0xd6: case 0xd7:      return ((tag - INT_SHORT_ZERO) << 16) + 256 * read() + read();    case 'I':    case LONG_INT:      return ((read() << 24)	      + (read() << 16)	      + (read() << 8)	      + read());      // direct long    case 0xd8: case 0xd9: case 0xda: case 0xdb:    case 0xdc: case 0xdd: case 0xde: case 0xdf:          case 0xe0: case 0xe1: case 0xe2: case 0xe3:    case 0xe4: case 0xe5: case 0xe6: case 0xe7:    case 0xe8: case 0xe9: case 0xea: case 0xeb:    case 0xec: case 0xed: case 0xee: case 0xef:      return tag - LONG_ZERO;      /* byte long */    case 0xf0: case 0xf1: case 0xf2: case 0xf3:    case 0xf4: case 0xf5: case 0xf6: case 0xf7:    case 0xf8: case 0xf9: case 0xfa: case 0xfb:    case 0xfc: case 0xfd: case 0xfe: case 0xff:      return ((tag - LONG_BYTE_ZERO) << 8) + read();            /* short long */    case 0x38: case 0x39: case 0x3a: case 0x3b:    case 0x3c: case 0x3d: case 0x3e: case 0x3f:      return ((tag - LONG_SHORT_ZERO) << 16) + 256 * read() + read();    case 'L':      return (int) parseLong();    case DOUBLE_ZERO:      return 0;    case DOUBLE_ONE:      return 1;      //case LONG_BYTE:    case DOUBLE_BYTE:      return (byte) (_offset < _length ? _buffer[_offset++] : read());      //case INT_SHORT:      //case LONG_SHORT:    case DOUBLE_SHORT:      return (short) (256 * read() + read());    case DOUBLE_FLOAT:      {	int f = parseInt();	return (int) Float.intBitsToFloat(f);      }    case 'D':      return (int) parseDouble();          default:      throw expect("integer", tag);    }  }  /**   * Reads a long   *   * <pre>   * L b64 b56 b48 b40 b32 b24 b16 b8   * </pre>   */  public long readLong()    throws IOException  {    int tag = read();    switch (tag) {    case 'N':      return 0;          case 'F':      return 0;          case 'T':      return 1;      // direct integer    case 0x80: case 0x81: case 0x82: case 0x83:    case 0x84: case 0x85: case 0x86: case 0x87:    case 0x88: case 0x89: case 0x8a: case 0x8b:    case 0x8c: case 0x8d: case 0x8e: case 0x8f:          case 0x90: case 0x91: case 0x92: case 0x93:    case 0x94: case 0x95: case 0x96: case 0x97:    case 0x98: case 0x99: case 0x9a: case 0x9b:    case 0x9c: case 0x9d: case 0x9e: case 0x9f:          case 0xa0: case 0xa1: case 0xa2: case 0xa3:    case 0xa4: case 0xa5: case 0xa6: case 0xa7:    case 0xa8: case 0xa9: case 0xaa: case 0xab:    case 0xac: case 0xad: case 0xae: case 0xaf:          case 0xb0: case 0xb1: case 0xb2: case 0xb3:    case 0xb4: case 0xb5: case 0xb6: case 0xb7:    case 0xb8: case 0xb9: case 0xba: case 0xbb:    case 0xbc: case 0xbd: case 0xbe: case 0xbf:      return tag - INT_ZERO;      /* byte int */    case 0xc0: case 0xc1: case 0xc2: case 0xc3:    case 0xc4: case 0xc5: case 0xc6: case 0xc7:    case 0xc8: case 0xc9: case 0xca: case 0xcb:    case 0xcc: case 0xcd: case 0xce: case 0xcf:      return ((tag - INT_BYTE_ZERO) << 8) + read();            /* short int */    case 0xd0: case 0xd1: case 0xd2: case 0xd3:    case 0xd4: case 0xd5: case 0xd6: case 0xd7:      return ((tag - INT_SHORT_ZERO) << 16) + 256 * read() + read();      //case LONG_BYTE:    case DOUBLE_BYTE:      return (byte) (_offset < _length ? _buffer[_offset++] : read());      //case INT_SHORT:      //case LONG_SHORT:    case DOUBLE_SHORT:      return (short) (256 * read() + read());    case 'I':    case LONG_INT:      return parseInt();      // direct long    case 0xd8: case 0xd9: case 0xda: case 0xdb:    case 0xdc: case 0xdd: case 0xde: case 0xdf:          case 0xe0: case 0xe1: case 0xe2: case 0xe3:    case 0xe4: case 0xe5: case 0xe6: case 0xe7:    case 0xe8: case 0xe9: case 0xea: case 0xeb:    case 0xec: case 0xed: case 0xee: case 0xef:      return tag - LONG_ZERO;      /* byte long */    case 0xf0: case 0xf1: case 0xf2: case 0xf3:    case 0xf4: case 0xf5: case 0xf6: case 0xf7:    case 0xf8: case 0xf9: case 0xfa: case 0xfb:    case 0xfc: case 0xfd: case 0xfe: case 0xff:      return ((tag - LONG_BYTE_ZERO) << 8) + read();            /* short long */    case 0x38: case 0x39: case 0x3a: case 0x3b:    case 0x3c: case 0x3d: case 0x3e: case 0x3f:      return ((tag - LONG_SHORT_ZERO) << 16) + 256 * read() + read();    case 'L':      return parseLong();    case DOUBLE_ZERO:      return 0;    case DOUBLE_ONE:      return 1;    case DOUBLE_FLOAT:      {	int f = parseInt();	return (long) Float.intBitsToFloat(f);      }    case 'D':      return (long) parseDouble();          default:      throw expect("long", tag);    }  }  /**   * Reads a float   *   * <pre>   * D b64 b56 b48 b40 b32 b24 b16 b8   * </pre>   */  public float readFloat()    throws IOException  {    return (float) readDouble();  }  /**   * Reads a double   *   * <pre>   * D b64 b56 b48 b40 b32 b24 b16 b8   * </pre>   */  public double readDouble()    throws IOException  {    int tag = read();    switch (tag) {    case 'N':      return 0;          case 'F':      return 0;          case 'T':      return 1;      // direct integer    case 0x80: case 0x81: case 0x82: case 0x83:    case 0x84: case 0x85: case 0x86: case 0x87:    case 0x88: case 0x89: case 0x8a: case 0x8b:    case 0x8c: case 0x8d: case 0x8e: case 0x8f:          case 0x90: case 0x91: case 0x92: case 0x93:    case 0x94: case 0x95: case 0x96: case 0x97:    case 0x98: case 0x99: case 0x9a: case 0x9b:    case 0x9c: case 0x9d: case 0x9e: case 0x9f:          case 0xa0: case 0xa1: case 0xa2: case 0xa3:    case 0xa4: case 0xa5: case 0xa6: case 0xa7:    case 0xa8: case 0xa9: case 0xaa: case 0xab:    case 0xac: case 0xad: case 0xae: case 0xaf:          case 0xb0: case 0xb1: case 0xb2: case 0xb3:    case 0xb4: case 0xb5: case 0xb6: case 0xb7:    case 0xb8: case 0xb9: case 0xba: case 0xbb:    case 0xbc: case 0xbd: case 0xbe: case 0xbf:      return tag - 0x90;      /* byte int */    case 0xc0: case 0xc1: case 0xc2: case 0xc3:    case 0xc4: case 0xc5: case 0xc6: case 0xc7:    case 0xc8: case 0xc9: case 0xca: case 0xcb:    case 0xcc: case 0xcd: case 0xce: case 0xcf:      return ((tag - INT_BYTE_ZERO) << 8) + read();            /* short int */    case 0xd0: case 0xd1: case 0xd2: case 0xd3:    case 0xd4: case 0xd5: case 0xd6: case 0xd7:      return ((tag - INT_SHORT_ZERO) << 16) + 256 * read() + read();    case 'I':    case LONG_INT:      return parseInt();      // direct long    case 0xd8: case 0xd9: case 0xda: case 0xdb:    case 0xdc: case 0xdd: case 0xde: case 0xdf:          case 0xe0: case 0xe1: case 0xe2: case 0xe3:    case 0xe4: case 0xe5: case 0xe6: case 0xe7:    case 0xe8: case 0xe9: case 0xea: case 0xeb:    case 0xec: case 0xed: case 0xee: case 0xef:      return tag - LONG_ZERO;      /* byte long */    case 0xf0: case 0xf1: case 0xf2: case 0xf3:    case 0xf4: case 0xf5: case 0xf6: case 0xf7:    case 0xf8: case 0xf9: case 0xfa: case 0xfb:    case 0xfc: case 0xfd: case 0xfe: case 0xff:      return ((tag - LONG_BYTE_ZERO) << 8) + read();            /* short long */    case 0x38: case 0x39: case 0x3a: case 0x3b:    case 0x3c: case 0x3d: case 0x3e: case 0x3f:      return ((tag - LONG_SHORT_ZERO) << 16) + 256 * read() + read();    case 'L':      return (double) parseLong();    case DOUBLE_ZERO:      return 0;    case DOUBLE_ONE:      return 1;    case DOUBLE_BYTE:      return (byte) (_offset < _length ? _buffer[_offset++] : read());    case DOUBLE_SHORT:      return (short) (256 * read() + read());    case DOUBLE_FLOAT:      {	int f = parseInt();	return Float.intBitsToFloat(f);      }          case 'D':      return parseDouble();          default:      throw expect("double", tag);    }  }  /**   * Reads a date.   *   * <pre>   * T b64 b56 b48 b40 b32 b24 b16 b8   * </pre>   */  public long readUTCDate()    throws IOException  {    int tag = read();    if (tag != 'd')      throw expect("date", tag);    long b64 = read();    long b56 = read();    long b48 = read();    long b40 = read();    long b32 = read();    long b24 = read();    long b16 = read();    long b8 = read();    return ((b64 << 56)	    + (b56 << 48)	    + (b48 << 40)	    + (b40 << 32)	    + (b32 << 24)	    + (b24 << 16)	    + (b16 << 8)	    + b8);  }  /**   * Reads a byte from the stream.   */  public int readChar()    throws IOException  {    if (_chunkLength > 0) {      _chunkLength--;      if (_chunkLength == 0 && _isLastChunk)        _chunkLength = END_OF_DATA;      int ch = parseUTF8Char();      return ch;    }    else if (_chunkLength == END_OF_DATA) {      _chunkLength = 0;      return -1;    }        int tag = read();    switch (tag) {    case 'N':      return -1;    case 'S':    case 's':    case 'X':    case 'x':      _isLastChunk = tag == 'S' || tag == 'X';      _chunkLength = (read() << 8) + read();      _chunkLength--;      int value = parseUTF8Char();      // special code so successive read byte won't      // be read as a single object.      if (_chunkLength == 0 && _isLastChunk)        _chunkLength = END_OF_DATA;      return value;          default:      throw expect("char", tag);    }  }  /**   * Reads a byte array from the stream.   */  public int readString(char []buffer, int offset, int length)    throws IOException  {    int readLength = 0;    if (_chunkLength == END_OF_DATA) {      _chunkLength = 0;      return -1;    }    else if (_chunkLength == 0) {      int tag = read();      switch (tag) {      case 'N':        return -1;            case 'S':      case 's':      case 'X':      case 'x':        _isLastChunk = tag == 'S' || tag == 'X';        _chunkLength = (read() << 8) + read();        break;      case 0x00: case 0x01: case 0x02: case 0x03:      case 0x04: case 0x05: case 0x06: case 0x07:      case 0x08: case 0x09: case 0x0a: case 0x0b:      case 0x0c: case 0x0d: case 0x0e: case 0x0f:      case 0x10: case 0x11: case 0x12: case 0x13:      case 0x14: case 0x15: case 0x16: case 0x17:      case 0x18: case 0x19: case 0x1a: case 0x1b:      case 0x1c: case 0x1d: case 0x1e: case 0x1f:	_isLastChunk = true;	_chunkLength = tag - 0x00;	break;      default:        throw expect("string", tag);      }    }    while (length > 0) {      if (_chunkLength > 0) {        buffer[offset++] = (char) parseUTF8Char();        _chunkLength--;        length--;        readLength++;      }      else if (_isLastChunk) {        if (readLength == 0)          return -1;        else {          _chunkLength = END_OF_DATA;          return readLength;        }      }      else {        int tag = read();        switch (tag) {        case 'S':        case 's':        case 'X':        case 'x':          _isLastChunk = tag == 'S' || tag == 'X';          _chunkLength = (read() << 8) + read();          break;              default:          throw expect("string", tag);        }      }    }        if (readLength == 0)      return -1;    else if (_chunkLength > 0 || ! _isLastChunk)      return readLength;    else {      _chunkLength = END_OF_DATA;      return readLength;    }  }  /**   * Reads a string   *   * <pre>   * S b16 b8 string value   * </pre>   */  public String readString()    throws IOException  {    int tag = read();    switch (tag) {    case 'N':      return null;    case 'T':      return "true";    case 'F':      return "false";      // direct integer    case 0x80: case 0x81: case 0x82: case 0x83:    case 0x84: case 0x85: case 0x86: case 0x87:    case 0x88: case 0x89: case 0x8a: case 0x8b:    case 0x8c: case 0x8d: case 0x8e: case 0x8f:          case 0x90: case 0x91: case 0x92: case 0x93:    case 0x94: case 0x95: case 0x96: case 0x97:    case 0x98: case 0x99: case 0x9a: case 0x9b:    case 0x9c: case 0x9d: case 0x9e: case 0x9f:          case 0xa0: case 0xa1: case 0xa2: case 0xa3:    case 0xa4: case 0xa5: case 0xa6: case 0xa7:    case 0xa8: case 0xa9: case 0xaa: case 0xab:    case 0xac: case 0xad: case 0xae: case 0xaf:          case 0xb0: case 0xb1: case 0xb2: case 0xb3:    case 0xb4: case 0xb5: case 0xb6: case 0xb7:    case 0xb8: case 0xb9: case 0xba: case 0xbb:    case 0xbc: case 0xbd: case 0xbe: case 0xbf:      return String.valueOf((tag - 0x90));      /* byte int */    case 0xc0: case 0xc1: case 0xc2: case 0xc3:    case 0xc4: case 0xc5: case 0xc6: case 0xc7:    case 0xc8: case 0xc9: case 0xca: case 0xcb:    case 0xcc: case 0xcd: case 0xce: case 0xcf:      return String.valueOf(((tag - INT_BYTE_ZERO) << 8) + read());            /* short int */    case 0xd0: case 0xd1: case 0xd2: case 0xd3:    case 0xd4: case 0xd5: case 0xd6: case 0xd7:      return String.valueOf(((tag - INT_SHORT_ZERO) << 16)			    + 256 * read() + read());    case 'I':    case LONG_INT:      return String.valueOf(parseInt());      // direct long    case 0xd8: case 0xd9: case 0xda: case 0xdb:    case 0xdc: case 0xdd: case 0xde: case 0xdf:          case 0xe0: case 0xe1: case 0xe2: case 0xe3:    case 0xe4: case 0xe5: case 0xe6: case 0xe7:    case 0xe8: case 0xe9: case 0xea: case 0xeb:    case 0xec: case 0xed: case 0xee: case 0xef:      return String.valueOf(tag - LONG_ZERO);      /* byte long */    case 0xf0: case 0xf1: case 0xf2: case 0xf3:    case 0xf4: case 0xf5: case 0xf6: case 0xf7:    case 0xf8: case 0xf9: case 0xfa: case 0xfb:    case 0xfc: case 0xfd: case 0xfe: case 0xff:      return String.valueOf(((tag - LONG_BYTE_ZERO) << 8) + read());            /* short long */    case 0x38: case 0x39: case 0x3a: case 0x3b:    case 0x3c: case 0x3d: case 0x3e: case 0x3f:      return String.valueOf(((tag - LONG_SHORT_ZERO) << 16)			    + 256 * read() + read());    case 'L':      return String.valueOf(parseLong());    case DOUBLE_ZERO:      return "0.0";    case DOUBLE_ONE:      return "1.0";    case DOUBLE_BYTE:      return String.valueOf((byte) (_offset < _length				    ? _buffer[_offset++]				    : read()));    case DOUBLE_SHORT:      return String.valueOf(((short) (256 * read() + read())));    case DOUBLE_FLOAT:      {	int f = parseInt();	return String.valueOf(Float.intBitsToFloat(f));      }          case 'D':      return String.valueOf(parseDouble());    case 'S':    case 's':    case 'X':    case 'x':      _isLastChunk = tag == 'S' || tag == 'X';      _chunkLength = (read() << 8) + read();      _sbuf.setLength(0);      int ch;      while ((ch = parseChar()) >= 0)        _sbuf.append((char) ch);      return _sbuf.toString();      // 0-byte string    case 0x00: case 0x01: case 0x02: case 0x03:    case 0x04: case 0x05: case 0x06: case 0x07:    case 0x08: case 0x09: case 0x0a: case 0x0b:    case 0x0c: case 0x0d: case 0x0e: case 0x0f:    case 0x10: case 0x11: case 0x12: case 0x13:    case 0x14: case 0x15: case 0x16: case 0x17:    case 0x18: case 0x19: case 0x1a: case 0x1b:    case 0x1c: case 0x1d: case 0x1e: case 0x1f:      _isLastChunk = true;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?