Con el fin de conseguir la transferencia más rápida de las velocidades a través de TCP en Java, que es mejor:Enchufes: BufferedOutputStream o simplemente OutputStream?
Opción A:
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
Opción B:
BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
He leído que el rendimiento necesario un éxito al escribir más de 8 KiB en OutputStream, se recomendó que se escribiera en pequeños trozos que no se escriben 8 KiB a la vez. 8 KiB es el tamaño de búfer predeterminado de un BufferedOutputStream.
Sin embargo, también he leído que al transferir datos a través de la red es bueno eliminar los bytes lo más rápido posible. Lo que significa que usar un búfer y escribir en pequeños fragmentos agrega una sobrecarga innecesaria.
Entonces, la opción A o la opción B? ¿Cuál funciona mejor?
En este momento supongo que la opción A proporciona las velocidades de transferencia más altas y consume mucha más CPU que la opción B. La opción B podría ser mejor, ya que no es mucho más lenta pero ahorra mucha CPU.
-
Bono pregunta: ¿Es una buena idea para tocar el tamaño de la ventana TCP? Por ejemplo estableciéndola en 64 KiB:
socket.setReceiveBufferSize(65536);
socket.setSendBufferSize(65536);
He intentado ajustarlo a 128 KiB en una máquina de prueba desde que leí que podría aumentar las velocidades pero cuando el servidor tiene un par de conexiones de la CPU estuviera al 100% en lugar de ~ 2% como cuando lo dejé solo. Supongo que 128 KiB es demasiado alto a menos que tengas un buen servidor que pueda manejar esa prisa en el tráfico, pero ¿es inteligente establecerlo en algo así como 32 KiB? Creo que el valor predeterminado fue 8 KiB para mí.
("socket" es "java.net.Socket")
El uso del núcleo OutputStream y InputStream no lo obliga a escribir bytes uno por uno. ¿Qué pasa con la escritura de matrices de bytes usando estas clases en comparación con el almacenamiento en búfer? – Mishax