短いバッファで読み書きするにはどうすればよいですか?
短い値の BufferedReader と Writer を実装しようとしています。毎回 short[] が渡され、short[] として読み取られます。
しかし、Java API にはこのインターフェースがなく、byte[] しかありません。
この機能を実装する最良の方法は何ですか?
さて、あなたのBufferedInputStream(リーダーではない)のために、あなたは同時に2バイトを読んでみることができます:
public synchronized int read(short[] s, int off, int len) throws IOException {
byte[] b = new byte[s.length * 2];
int read = read(b, off * 2, len * 2);
for (int i = 0; i < read; i+=2) {
int b1 = b[i];
int b2 = b[i+1];
s[i/2] = (short) ((b1 << 8) | b2);
}
return read / 2;
}
BufferedOutputStream(ライターではない)の場合、2バイトを同時に書き込むための逆の操作を試すことができます。
長さ 2 の ByteBuffer を使用して、バイトを読み書きし、2 つのセットを short に変換できます。
ByteBuffer put() to put the bytes into or putShort() when going the other way.
ByteBuffer.getShort() to convert back into shorts.
Reader インターフェイスを実装し、ライター クラスを拡張して、short[] 以外のライターを実装できます。
DataOutputStream を BufferedOutputStream にラップし、配列引数に対して writeShort() を繰り返し呼び出すメソッド writeShortArray(short[]) を実装するだけです。入力についても同様です。