0

短いバッファで読み書きするにはどうすればよいですか?

短い値の BufferedReader と Writer を実装しようとしています。毎回 short[] が渡され、short[] として読み取られます。

しかし、Java API にはこのインターフェースがなく、byte[] しかありません。

この機能を実装する最良の方法は何ですか?

4

4 に答える 4

1

さて、あなたの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バイトを同時に書き込むための逆の操作を試すことができます。

于 2012-12-03T17:36:07.430 に答える
1

長さ 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.
于 2012-12-03T17:27:12.533 に答える
0

Reader インターフェイスを実装し、ライター クラスを拡張して、short[] 以外のライターを実装できます。

于 2012-12-03T17:22:37.713 に答える
0

DataOutputStream を BufferedOutputStream にラップし、配列引数に対して writeShort() を繰り返し呼び出すメソッド writeShortArray(short[]) を実装するだけです。入力についても同様です。

于 2012-12-03T22:20:25.473 に答える