0

我正在通过互联网发送文件,接收器接收到它发送的文件的位置,当然还有数据,我应该从发送的位置开始将接收到的数据写入文件,但看起来 NIO 喜欢重写位置之前的任何数据。

所以我正在做的是

fc = new FileOutputStream(new File(file)).getChannel();

然后我在上面写上从前面定义的 pos 开始的缓冲区

fc.write(buffer, pos);

当我发送被分割为多个的文件并将数据写入文件时,就像我展示的那样,由于某种原因,之前写入的数据被零覆盖

我还尝试过调试,例如检查它是否实际开始从该位置写入并且它工作正常并且在传输之间存在延迟,因此他们无法并发写入文件,这无论如何都不应该成为问题。

我也关闭频道

fc.close();

因为我将文件分段发送,所以我无法将 fc 保存在内存中。

我的代码有什么问题,或者我怎么可能从 x 位置开始写入文件而不清空该位置之前的数据?

4

1 回答 1

0

在通道之间复制的规范方法如下:

while (in.read(buffer) > 0 || buffer.hasRemaining())
{
  buffer.flip();
  out.write(buffer);
  buffer.compact();
}

如果您要关闭并重新打开文件,则需要在第一次之后以附加模式打开它。

于 2012-06-13T22:43:12.543 回答