📄 channelbuffer.java
字号:
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; } // // 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 } } 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; } } 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; } void setBufLength(int bufLengthToSet) { this.bufLength = bufLengthToSet; this.directBuffer.limit(this.bufLength); this.dirty = true; } int getBufLength() { return this.directBuffer.limit(); } private byte[] bufferToArray() { if (!this.dirty) { return this.asBytes; } else if (this.directBuffer.hasArray()) { this.asBytes = this.directBuffer.array(); this.dirty = false; return this.asBytes; } else { int bufferLength = this.directBuffer.limit(); this.asBytes = new byte[bufferLength]; int oldPosition = getPosition(); this.directBuffer.position(0); this.directBuffer.get(this.asBytes, 0, bufferLength); this.directBuffer.position(oldPosition); this.dirty = false; return this.asBytes; } } int getCapacity() { return this.directBuffer.capacity(); } /* (non-Javadoc) * @see com.mysql.jdbc.Buffer#getBytes(int, int) */ byte[] getBytes(int offset, int len) { byte[] b = new byte[len]; byte[] nioByteBuffer = bufferToArray(); try { System.arraycopy(nioByteBuffer, offset, b, 0, len); //this.position += len; // update cursor this.directBuffer.position((offset + len)); } catch (ArrayIndexOutOfBoundsException aiobex) { throw aiobex; } return b; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -