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 に答える