1

ByteBuffer1024バイトを含むがあります。

キー時に特定のオフセットでバッファ内のショートを上書きする必要があります。

ByteBufferクラスにが含まれていることは知ってputShort()いますが、これはデータを上書きせず、単にデータを追加するだけなので、バッファオーバーフローが発生します。

を使用してこれを行う直接的な方法はないByteBufferと思いますが、誰かがこれを行う方法を提案できるでしょうか?

ありがとう

返信してくれたすべての人のおかげで、私は間違ったバージョンのputShort()を使用していたのでそれができるようでした。同じコードを6時間見つめると、そうなると思います。

再度、感謝します

4

4 に答える 4

3

問題を再現できません。すべて問題ないようです。

    ByteBuffer bb = ByteBuffer.allocate(20);
    bb.putShort(10, (short)0xffff);
    System.out.println(Arrays.toString(bb.array()));

プリント

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0]
于 2013-02-14T16:54:39.457 に答える
1

特別な場合は、 array()メソッドbacking arrayを使用して直接変更できます。

次に、適切なインデックスに2バイトを挿入します。

if(myBuffer.hasArray()) {
    byte[] array = myBuffer.array();
    array[index] = (byte) (myShort & 0xff);
    array[index + 1] = (byte) ((myShort >> 8) & 0xff);
}
于 2013-02-14T16:53:29.017 に答える
1
int p = b.position();
b.position( ZePlace );
p.putShort( ZeValue );
b.position( p );

http://docs.oracle.com/javase/7/docs/api/java/nio/Buffer.html#position%28%29

于 2013-02-14T16:54:10.090 に答える
0

位置インデックスを受け入れるこのバージョンのputShort()を呼び出すことができると思います。

于 2013-02-14T16:54:39.007 に答える