我正在编写一个库,用于从/向 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
}
在这种情况下,doesallocateDirect(1)
总是比allocate(1)
?