我想读取存储在ChannelBuffer中包含的HttpResponse对象中的二进制数据。我尝试使用下面的代码从ChannelBuffer读取和保存,但不起作用。读取存储在通道缓冲区中的二进制数据的正确方法是什么?

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


上面的代码从chanBuff.array()UnsupportedOperationException)引发异常。不知道从ChannelBuffer复制字节数组的正确方法是什么。

存储此内容(例如媒体)的目的是保存并转码。但是,我一直将保存的文件大小设为零。

我还打算通过ChannelBuffer将已处理的数据复制回HTTP响应中。为了写回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);


这是正确的方法吗?

最佳答案

在第二个示例中,您不应该继续增加偏移量。那是缓冲区的偏移量,而不是文件的偏移量。整个偏移量应使用零。

09-25 23:34