En primer lugar, esto no está relacionado con los servlets. Esto se aplica a Java IO en general. Después de todo, solo tiene InputStream
y OutputStream
.
En cuanto a la respuesta, usted no es el único que se preguntó sobre esto. En la interwebs se puede encontrar a otras personas que se preguntaban sobre el mismo, pero se tomaron el esfuerzo para poner a prueba/referencia por sí mismos:
En general, un FileChannel
con una gama de 256 K bytes que se lee a través de un ByteBuffer
envuelto y escrito directamente desde la matriz de bytes es la manera más rápida. De hecho, NIO.
FileInputStream input = new FileInputStream("/path/to/file.ext");
FileChannel channel = input.getChannel();
byte[] buffer = new byte[256 * 1024];
ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
try {
for (int length = 0; (length = channel.read(byteBuffer)) != -1;) {
System.out.write(buffer, 0, length);
byteBuffer.clear();
}
} finally {
input.close();
}
nio no es una bala mágica que hace que todo se base más rápido. de hecho, nio generalmente es útil si necesita hacer que su código sea más "escalable" (por ejemplo, menos hilos que manejen más conexiones). para el código de subproceso único, io casi siempre es tan bueno o mejor (la excepción a esta regla puede ser transferencia de archivo a archivo). – jtahlborn