Tengo que transferir a ~ 100 MB de datos a través de ServerSocket usando NIO, pero no puedo encontrar la manera de hacer esto sin romper la transferencia en cualquier lugar/mantener el estado de la transferencia.Java - La transferencia de archivos de gran tamaño a través de canales - NIO
Mi primera idea era enviar el tamaño del archivo, al parecer, no puedo enviar el tamaño de los archivos que los grandes, ya que incluso no cabe en la memoria RAM de una sola vez. Entonces pensé, ¿por qué no transferir hasta que no se recibe nada, pero eso es cuando problema viene.
Incluso si estoy escribiendo los datos del servidor del lado todo el tiempo
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();
}
sino porque tiene que haber pausas en la transferencia de archivos, leer los datos constantemente y romper cuando no hay nada disponible era una mala idea.
No puedo entender cómo podría decirle al cliente si todavía hay datos disponibles sin tener que enviar cada porción de datos como un nuevo paquete con código de operación, etc., o ¿es posible?
También me pregunto si tener una mejor manera de enviar búfer entero que por debajo
while(channel.write(buffer) > 0);
he respondido a parte de esto, pero tengo que decir que no entiendo qué quiere decir con "tiene que haber interrupciones en la transferencia de archivos algún tiempo" y "leer los datos constantemente y romper cuando nada está disponible fue mala idea ". Por favor explique. – EJP