channelbuffer.java

来自「mysql的jdbc驱动」· Java 代码 · 共 661 行 · 第 1/2 页

JAVA
661
字号
		case 252:			return readInt();		case 253:			return readLongInt();		case 254:			return readLong();		default:			return sw;		}	}	final long readLong() {		long l = ((long)this.directBuffer.get() & 0xff)				| (((long)this.directBuffer.get() & 0xff) << 8)				| (((long)this.directBuffer.get() & 0xff) << 16)				| (((long)this.directBuffer.get() & 0xff) << 24);		// this.directBuffer.position(this.position);		return l;	}	final int readLongInt() {		int i = (this.directBuffer.get() & 0xff)				| ((this.directBuffer.get() & 0xff) << 8)				| ((this.directBuffer.get() & 0xff) << 16);		// this.directBuffer.position(this.position);		return i;	}	// 2000-06-05 Fixed	final long readLongLong() {		long l = (this.directBuffer.get() & 0xff)				| ((long) (this.directBuffer.get() & 0xff) << 8)				| ((long) (this.directBuffer.get() & 0xff) << 16)				| ((long) (this.directBuffer.get() & 0xff) << 24)				| ((long) (this.directBuffer.get() & 0xff) << 32)				| ((long) (this.directBuffer.get() & 0xff) << 40)				| ((long) (this.directBuffer.get() & 0xff) << 48)				| ((long) (this.directBuffer.get() & 0xff) << 56);		// this.directBuffer.position(this.position);		return l;	}	final int readnBytes() {		int sw = this.directBuffer.get() & 0xff;		// this.directBuffer.position(this.position);		switch (sw) {		case 1:			return this.directBuffer.get() & 0xff;		case 2:			return this.readInt();		case 3:			return this.readLongInt();		case 4:			return (int) this.readLong();		default:			return 255;		}	}	//	// Read a null-terminated string	//	// To avoid alloc'ing a new byte array, we	// do this by hand, rather than calling getNullTerminatedBytes()	//	final String readString() {		int len = 0;		int maxLen = getBufLength();		int oldPosition = getPosition();		while ((getPosition() < maxLen) && (this.directBuffer.get() != 0)) {			len++;		}		setPosition(oldPosition);		String s = new String(bufferToArray(), getPosition(), len);		this.directBuffer.position(getPosition() + len + 1); // update cursor		return s;	}	final String readString(String encoding) throws SQLException {		int len = 0;		int maxLen = getBufLength();		while ((getPosition() < maxLen) && (this.directBuffer.get() != 0)) {			len++;		}		try {			return new String(bufferToArray(), getPosition(), len, encoding);		} catch (UnsupportedEncodingException uEE) {			throw new SQLException(					Messages.getString("ChannelBuffer.0") //$NON-NLS-1$							+ encoding + Messages.getString("ChannelBuffer.1"), SQLError.SQL_STATE_ILLEGAL_ARGUMENT); //$NON-NLS-1$		} finally {			this.directBuffer.position(getPosition() + len + 1); // update																	// cursor		}	}	void setBufLength(int bufLengthToSet) {		this.bufLength = bufLengthToSet;		this.directBuffer.limit(this.bufLength);		this.dirty = true;	}	/**	 * Sets the array of bytes to use as a buffer to read from.	 * 	 * @param byteBuffer	 *            the array of bytes to use as a buffer	 */	public void setByteBuffer(byte[] byteBuffer) {		this.directBuffer = ByteBuffer.wrap(byteBuffer);	}	/**	 * Set the current position to write to/ read from	 * 	 * @param position	 *            the position (0-based index)	 */	public void setPosition(int position) {		// this.position = position;		this.directBuffer.position(position);	}	final void writeByte(byte b) throws SQLException {		ensureCapacity(1);		this.directBuffer.put(b);		this.dirty = true;	}	// Write a byte array	final void writeBytesNoNull(byte[] bytes) throws SQLException {		int len = bytes.length;		ensureCapacity(len);		this.directBuffer.put(bytes, 0, len);		this.dirty = true;	}	// Write a byte array with the given offset and length	final void writeBytesNoNull(byte[] bytes, int offset, int length)			throws SQLException {		ensureCapacity(length);		this.directBuffer.put(bytes, offset, length);		this.dirty = true;	}	final void writeDouble(double d) throws SQLException {		long l = Double.doubleToLongBits(d);		writeLongLong(l);		this.dirty = true;	}	final void writeFieldLength(long length) throws SQLException {		if (length < 251) {			writeByte((byte) length);		} else if (length < 65536L) {			ensureCapacity(3);			writeByte((byte) 252);			writeInt((int) length);		} else if (length < 16777216L) {			ensureCapacity(4);			writeByte((byte) 253);			writeLongInt((int) length);		} else {			ensureCapacity(9);			writeByte((byte) 254);			writeLongLong(length);		}	}	final void writeFloat(float f) throws SQLException {		ensureCapacity(4);		int i = Float.floatToIntBits(f);		this.directBuffer.put((byte) (i & 0xff));		this.directBuffer.put((byte) (i >>> 8));		this.directBuffer.put((byte) (i >>> 16));		this.directBuffer.put((byte) (i >>> 24));		this.dirty = true;	}	// 2000-06-05 Changed	final void writeInt(int i) throws SQLException {		ensureCapacity(2);		this.directBuffer.put((byte) (i & 0xff));		this.directBuffer.put((byte) (i >>> 8));		this.dirty = true;	}	// Write a String using the specified character	// encoding	final void writeLenBytes(byte[] b) throws SQLException {		int len = b.length;		ensureCapacity(len + 9);		writeFieldLength(len);		this.directBuffer.put(b, 0, len);		this.dirty = true;	}	// Write a String using the specified character	// encoding	final void writeLenString(String s, String encoding, String serverEncoding,			SingleByteCharsetConverter converter, boolean parserKnowsUnicode)			throws UnsupportedEncodingException, SQLException {		byte[] b = null;		if (converter != null) {			b = converter.toBytes(s);		} else {			b = StringUtils.getBytes(s, encoding, serverEncoding,					parserKnowsUnicode);		}		int len = b.length;		ensureCapacity(len + 9);		writeFieldLength(len);		this.directBuffer.put(b, 0, len);		this.dirty = true;	}	// 2000-06-05 Changed	final void writeLong(long i) throws SQLException {		ensureCapacity(4);		this.directBuffer.put((byte) (i & 0xff));		this.directBuffer.put((byte) (i >>> 8));		this.directBuffer.put((byte) (i >>> 16));		this.directBuffer.put((byte) (i >>> 24));		this.dirty = true;	}	// 2000-06-05 Changed	final void writeLongInt(int i) throws SQLException {		ensureCapacity(3);		this.directBuffer.put((byte) (i & 0xff));		this.directBuffer.put((byte) (i >>> 8));		this.directBuffer.put((byte) (i >>> 16));		this.dirty = true;	}	final void writeLongLong(long i) throws SQLException {		ensureCapacity(8);		this.directBuffer.put((byte) (i & 0xff));		this.directBuffer.put((byte) (i >>> 8));		this.directBuffer.put((byte) (i >>> 16));		this.directBuffer.put((byte) (i >>> 24));		this.directBuffer.put((byte) (i >>> 32));		this.directBuffer.put((byte) (i >>> 40));		this.directBuffer.put((byte) (i >>> 48));		this.directBuffer.put((byte) (i >>> 56));		this.dirty = true;	}	// Write null-terminated string	final void writeString(String s) throws SQLException {		ensureCapacity((s.length() * 2) + 1);		writeStringNoNull(s);		this.directBuffer.put((byte) 0);		this.dirty = true;	}	// Write string, with no termination	final void writeStringNoNull(String s) throws SQLException {		int len = s.length();		ensureCapacity(len * 2);		this.directBuffer.put(s.getBytes(), 0, len);		this.dirty = true;	}	// Write a String using the specified character	// encoding	final void writeStringNoNull(String s, String encoding,			String serverEncoding, boolean parserKnowsUnicode)			throws UnsupportedEncodingException, SQLException {		byte[] b = StringUtils.getBytes(s, encoding, serverEncoding,				parserKnowsUnicode);		int len = b.length;		ensureCapacity(len);		this.directBuffer.put(b, 0, len);		this.dirty = true;	}}

⌨️ 快捷键说明

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