MEJORAS QUE TRAJO CONSIGO EL J2SE1.4: NIO AVANZADO(II)
Java 2 Platform, Standard Edition (J2SE)
Brevemente, comento algunas características avanzadas de NIO:
1. MappedByteBuffers: permite asociar una porción del fichero en un buffer de memoria.
Es importante anotar que sólo carga en memoria bajo demanda -sólo lo que se está leyendo-.
2. E/S No Bloqueante:
ByteBuffer buffer = ByteBuffer.allocate( bufferSize );
Socket newSocket = ss.accept();
newSocket.configureBlocking( false );
SocketChannel sch = socket.getChannel();
buffer.clear();
sch.read( buffer );
La llamada a read devuelve un buffer vacío si no hay nada que leer, en lugar de quedarse esperando hasta que llegue el primer byte.
3. Multiplexación
Para realizar E/S multiplexada, en Java hasta ahora no quedaba más remedio que utilizar polling. Sin embargo, de los viejos tiempos de C nos llega el "selector": es un objeto que monitoriza un conjunto de canales, avisando cuando alguno tiene datos de entrada.
El método Selector.select() se queda bloqueado hasta que alguno de los canales está preparado:
while (true) {
selector.select();
// deal with new input ...
}
Interfaces de Red
La clase NetworkInterface provee acceso a objetos de nivel de sistema operativo que representan las interfaces.
Java 2 Platform, Standard Edition (J2SE)
Brevemente, comento algunas características avanzadas de NIO:
1. MappedByteBuffers: permite asociar una porción del fichero en un buffer de memoria.
Es importante anotar que sólo carga en memoria bajo demanda -sólo lo que se está leyendo-.
2. E/S No Bloqueante:
ByteBuffer buffer = ByteBuffer.allocate( bufferSize );
Socket newSocket = ss.accept();
newSocket.configureBlocking( false );
SocketChannel sch = socket.getChannel();
buffer.clear();
sch.read( buffer );
La llamada a read devuelve un buffer vacío si no hay nada que leer, en lugar de quedarse esperando hasta que llegue el primer byte.
3. Multiplexación
Para realizar E/S multiplexada, en Java hasta ahora no quedaba más remedio que utilizar polling. Sin embargo, de los viejos tiempos de C nos llega el "selector": es un objeto que monitoriza un conjunto de canales, avisando cuando alguno tiene datos de entrada.
El método Selector.select() se queda bloqueado hasta que alguno de los canales está preparado:
while (true) {
selector.select();
// deal with new input ...
}
Interfaces de Red
La clase NetworkInterface provee acceso a objetos de nivel de sistema operativo que representan las interfaces.
Comments
Pues eso, que con el java.nio, un poco de patrones y algo de herencia estoy haciendo un juguete que intentaré que mis jefes y demás compañeros de trabajo le pierdan el miedo que le tienen a las prestaciones en Java y se animen a desarrollar cosas sobre Java.