ストリーム/チャネルとの間でビットを読み書きするためのライブラリを作成しています。
チャンネルを操作するときは、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)