我通过互联网发送文件,接收方收到发送文件的位置,当然还有数据,我应该从发送的位置开始写文件上收到的数据,但看起来像NIO喜欢在该职位之前过度写入任何数据。
所以我正在做的是
fc = new FileOutputStream(new File(file)).getChannel();
然后我在它上面写了从之前定义的pos开始的缓冲区
fc.write(buffer, pos);
当我发送分割为多个文件的文件并将数据写入文件时,就像我出于某种原因显示的那样,之前写入的数据被零覆盖
我也尝试过以下方式进行调试:检查它实际上是从位置开始写入并且它正常工作并且在传输之间有延迟,因此它们无法写入并发的文件,这不应该是问题
我也在关闭频道
fc.close();
因为我发送的是文件,所以我无法将fc保存在内存中。
我的代码有什么问题,或者我怎么可能从x位置开始写入文件而不会在位置之前清空数据?
答案 0 :(得分:0)
在渠道之间复制的规范方法如下:
while (in.read(buffer) > 0 || buffer.hasRemaining())
{
buffer.flip();
out.write(buffer);
buffer.compact();
}
如果您正在关闭并重新打开该文件,则需要在第一次之后以附加模式打开它。