接続に障害が発生した場合にはモード転送されたデータの量は?
bytesTransferred = fileIChannel.transferTo(0, fileIChannel.size(), socketChannel);
// or using a buffer
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024*8);
while (fileIChannel.read(byteBuffer) != -1) {
byteBuffer.flip();
bytesTransferred += socketChannel.write(byteBuffer);
byteBuffer.clear();
ブロッキングソケットを介してファイルを送信し、私は転送されたバイトの数を維持する必要があります。 これは、特定のバイト数を受け取ったときにサーバーからの応答をすべて待つことで実行できます。または、接続が復元されると、受信したバイト数の要求を送信します。どのオプションがより正確になるのですか?この問題は通常どのように解決されますか?
もう1つの質問です。大容量のデータをソケット経由で送信する際にデータの整合性が保証されていますか?
あなたのコードが何をしていると思いますか分かりません。 -1に対してチェックするだけでなく、実際に何ビットが読み取られたかを確認する必要があります。その番号はread()の呼び出しごとに変わる可能性があるためです。そして、はい、TCP層は少しのエラー検出を行います。自分で簡単に調べることができるはずです。 – GhostCat
@GhostCatありがとうございます。 'flip()'メソッドは、実際に読み取られたデータの数に制限を設定します。 –