NIO を使用して ServerSocket 経由で最大 100MB のデータを転送する必要がありますが、どこでも転送を中断したり、転送の状態を維持したりせずにこれを行う方法がわかりません。
私の最初のアイデアは、ファイルのサイズを送信することでした.RAMに一度に収まらないため、その大きなファイルのサイズを送信できないようです。それから、何も受信しないまで転送しないのはなぜだろうと思いましたが、それが問題が発生したときです。
サーバー側のデータを常に書き込んでいても
FileChannel fc = new FileInputStream(f).getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(fc.read(buffer) > 0) {
buffer.flip();
while(channel.write(buffer) > 0);
buffer.clear();
}
しかし、ファイル転送を中断する必要があるため、データを絶えず読み取り、何も利用できないときに中断するのは悪い考えでした。
データの各スライスをオペコードなどを含む新しいパケットとして送信することなく、まだデータが利用可能かどうかをクライアントに伝える方法がわかりませんか、それとも可能ですか?
以下よりもバッファ全体を送信するより良い方法があるかどうかも疑問に思っています
while(channel.write(buffer) > 0);