我正在编写一个库,用于从/向Streams / Channels读取/写入位。
使用Channels时,我使用1字节长的ByteBuffer。
以下是如何使用这些ByteBuffer进行读/写。
//@Override // commented for pre 5
public int readUnsignedByte() throws IOException {
buffer.clear(); // ------------------------------------------- clear
for (int read = -1;;) {
read = input.read(buffer); // ----------------------------- read
if (read == -1) {
throw new EOFException("eof");
}
if (read == 1) {
break;
}
}
buffer.flip(); // --------------------------------------------- flip
return (buffer.get() & 0xFF); // ------------------------------- get
}
//@Override // commented for pre 5
public void writeUnsignedByte(final int value) throws IOException {
buffer.put((byte) value); // ----------------------------------- put
buffer.flip(); // --------------------------------------------- flip
while (output.write(buffer) != 1); // ------------------------ write
buffer.clear(); // ------------------------------------------- clear
}
在这种情况下,allocateDirect(1)
总是优于allocate(1)
吗?