我想读取存储在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);
这是正确的做法吗?
答案 0 :(得分:1)
在你的第二个例子中,你不应该继续增加偏移量。这是缓冲区的偏移量,而不是文件。你应该在整个过程中使用零作为补偿。