1
実際にソケットからファイルを読み取る正しい方法は何ですか?クライアント側でファイルの書き込みが終了しても、ファイルの読み込みループが終了しないためです。私はまだバッファの位置と長さを印刷しようとしましたが、それでも読み取るデータがあれば。ソケットからファイルを読み込む正しい方法は何ですか?
ここにファイルを読むための私のコードです。
private void readActualData(SocketChannel socketChannel) {
RandomAccessFile aFile = null;
System.out.println("Reading actual Data");
try {
aFile = new RandomAccessFile(path, "rw");
ByteBuffer buffer = ByteBuffer.allocate(50000000);
FileChannel fileChannel = aFile.getChannel();
int length;
while ((length = socketChannel.read(buffer)) >= 0 || buffer.position() > 0) {
buffer.flip();
fileChannel.write(buffer);
buffer.compact();
System.out.println("Length : "+length+" and Buffer position : "+buffer.position());
}
fileChannel.close();
System.out.println("End of file reached..Done Reading");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
私は、複数のファイルの場合に必要なことを熟考しました。ファイルの最初の長さをカウントダウンする必要があります。読み込みループの終わりに 'buffer.limit() - buffer.position()'の値より小さくなると、バッファの制限を調整する必要がありますそうでないように。 – EJP