2

ByteBufferの使用については、まだ少し不安定です。私がやりたいことは、データを ByteBuffer に書き込むことです。次に、ByteBuffer の先頭に移動し、そのすべてのデータの前にバイトを書き込みます (パケットのペイロードが書き込まれ、ヘッダーが先頭に追加されます)。それ?

図:

バッファは次で始まります:

|  PAYLOAD  |

opコードヘッダーが追加された後のバッファ(やりたいことの後):

|  HEADER  |  PAYLOAD  |

| | 文字通り何かではなく、データの種類の区切り記号です。

4

3 に答える 3

1

探しているものは「スキャッター ギャザー I/O」と呼ばれ、 および でサポートされScatteringByteChannel.read(ByteBuffer[])ていGatheringByteChannel.write(ByteBuffer[])ます。配列に注意してください。これらのインターフェイスは、 、 、および Pipe チャネルでサポートされてFileChannelSocketChannelますDatagramSocketChannel

于 2012-06-18T00:45:46.720 に答える
0
ByteBuffer bbuf = ByteBuffer.allocate(HEADER_SZ + PAYLOAD_SZ);
bbuf.position(HEADER_SZ);
for(int i=0; i < PAYLOAD_SZ; i++)
    bbuf.put(payload[i]);
bbuf.rewind();
for(int i=0; i < HEADER_SZ; i++)
    bbuf.put(header[i]);

ソース データのバイト インデックス付けについて仮定しました。まとめて入れたほうがいいのですが、これがスタートです。

于 2012-06-18T00:47:15.037 に答える