gpt4 book ai didi

java - 读取和写入 ChannelBuffer 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 14:33:54 26 4
gpt4 key购买 nike

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

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);

这是正确的方法吗?

最佳答案

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

关于java - 读取和写入 ChannelBuffer 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com