0

ChannelBufferに含まれるオブジェクトに格納されているバイナリ データを読み取りたいですHttpResponse。以下のコードを使用して から読み取って保存しようとしましたChannelBufferが、機能していません。チャネル バッファに格納されたバイナリ データを読み取る正しい方法は何ですか?

ChannelBuffer chanBuff = response.getContent();
FileOutputStream outputStream = new FileOutputStream(outputFileName);       
outputStream.write(chanBuff.array());                   
outputStream.close();

上記のコードはchanBuff.array()( UnsupportedOperationException) から例外をスローします。からバイト配列をコピーする正しい方法がわかりませんChannelBuffer

このコンテンツ (メディアなど) を保存する目的は、保存してトランスコードすることです。ただし、保存されたファイルのサイズが一貫してゼロになっています。

また、処理されたデータを を介して HTTP 応答にコピーするつもりChannelBufferです。HTTP メッセージに書き戻すために、以下のコードがあります。このコードは時々スローしArrayOutOfBoundExceptionます。ここで正しいアプローチは何ですか?

ChannelBuffer dynamicBuffer = dynamicBuffer();
dynamicBuffer.clear();
dynamicBuffer.ensureWritableBytes(fileLen);

ChannelBufferOutputStream buffOutStream = new ChannelBufferOutputStream(dynamicBuffer);

byte[] byteBuf = new byte[4096];
int bytesRead = -1;
int offSet = 0;

while ((bytesRead = inStream.read(byteBuf)) != -1) {
    buffOutStream.write(byteBuf, offSet, bytesRead);
    offSet += bytesRead;
}

response.setContent(EMPTY_BUFFER);
response.setContent(buffOutStream.buffer());
response.setHeader("Content-Type", contType);
response.setHeader("Content-Length", fileLen);   

これは正しいアプローチですか?

4

1 に答える 1

1

2 番目の例では、オフセットを増やし続けるべきではありません。これは、ファイルではなく、バッファーへのオフセットです。全体を通して、オフセットにはゼロを使用する必要があります。

于 2013-05-20T01:53:11.507 に答える