HTTP响应附件下载完成通知

时间:2013-06-18 21:59:34

标签: java http netty

在LittleProxy实现中,是否有一项功能可以让我们获得文件下载完成的通知?

目前我使用下面的代码来保存HTTP响应消息的附件。我不确定这是chanBuff.getBytes(...)阻止呼叫还是非阻止。

ChannelBuffer chanBuff = response.getContent();
FileOutputStream outputStream = new FileOutputStream(outputFileName);
chanBuff.getBytes(0, outputStream, chanBuff.readableBytes());
outputStream.close();

当我尝试在此代码之后立即处理保存的文件时,它会抛出异常。如果我等到文件完全下载并保存在磁盘上,可能问题可能会自动解决。

java.io.IOException: Channel not open for writing - cannot extend file to required size
    at sun.nio.ch.FileChannelImpl.map(Unknown Source)
    at com.googlecode.mp4parser.AbstractBox.parse(AbstractBox.java:109)
    at com.coremedia.iso.AbstractBoxParser.parseBox(AbstractBoxParser.java:118)
    at com.coremedia.iso.IsoFile.parse(IsoFile.java:85)
    at com.coremedia.iso.IsoFile.<init>(IsoFile.java:54)
    at org.media.processor.LibraryImpl.printFileDetails(LibraryImpl.java:529)

1 个答案:

答案 0 :(得分:1)

ChannelBuffer只是在byte []周围进行封装。

chanBuff.getBytes(0,outputStream,chanBuff.readableBytes())将调用outputStream.write(byte [],begin,length)。

因此,在编写内容之前,首先应在ChannelBuffer中分配一个正确的长度字节。