SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
TemariodecursoJavaSE©IñakiMartín

17.- NIO
TEMARIO DE CURSO
PROGRAMACIÓN JAVA SE
CAPÍTULO 17
PERSISTENCIA.
FICHEROS NIO
(New IO API para ficheros)
© Iñaki MartínEste obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
TemariodecursoJavaSE©IñakiMartín

17.- NIO
NOTA: Ante nada, se suponen para este tema conocimientos consolidados de la IO APi de java, tratada ya en capítulos
anteriores
• Desde Java 1.4 existe una nueva API para operar con ficheros, llamada NIO (New IO)
• Está orientada a tratamiento de muchos trafico de poco tamaño y no continuo acceso, como un
chat (mientras que la clase IO se acerca más al uso de tráfico de gran tamaño y conexiones
continuadas)
• NIO se basa en tres conceptos básicos:
‣ Channel : mecanismo de lectura/esctritura
‣ Buffer: area donde un channel lee/escribe
‣ Selector: es un objeto que puede monitorizar varios channels evaluando eventos (estado de
una conexion, llegada o salida de datos , etc)
• NIO aprovecha tambien la posibilidad de no bloquear operaciones IO (asincronismo de
operaciones IO). Por ejemplo, un hilo puede pedir a una channel una lectura, y almacenarla en un
buffer, y mientras que channel esta leyendo del fichero y almacenando en el buffer, el hilo puede
continuar haciendo otras cosas, hasta que el channel acabe de escribir, con lo que el hilo puede
volver para procesar el buffer obtenido
NIO - Definición
NIO
2
TemariodecursoJavaSE©IñakiMartín

17.- NIO
๏ Un channel es como un Stream del clásico IO de Java, con dos diferencias importantes:
• Un channel vale para leer y para escribir, no solo para una de dichas cosas
• Puede operar asíncronamente
• Lee y escribe siempre en un Buffer
๏ Las clases de Channels mas usadas son:
• FileChannel: Lee y escribe de ficheros
• DatagramChannel: Lee y escribe datagramas, en un servicio UDP
• SocketChannel: Lee y escribe en un servicio TCP
• ServerSocketChannel: Atiende solicitudes de conexiones TCP
NIO - Definición
CHANNELS
3
RandomAccessFile raf = new RandomAccessFile("ejemploFicheroNio.txt", "rw");
FileChannel fileChannel = raf.getChannel();
๏ Las manera mas sencilla de crear un Channel es desde un RandomAccessFile de java IO normal,
usado el método genChannel() de dicha clase:
TemariodecursoJavaSE©IñakiMartín

17.- NIO
๏ Un buffer es una zona de memoria donde un channel escribe y lee
๏ Para acceder a esta memoria se usa un objeto de clase Buffer, y los métodos que dispone.
Normalmente, el proceso de trabajo de leer (de algún sitio) con buffers exige cinco pasos:
Crear y dimensionar el buffer
Escribir en el buffer.
Mientras se escribe, el buffer controla cuanto se va escribiendo
Invertir el buffer , llamando al método flip()
Este método pasa el buffer del modo escritura al modo lectura.
Leer datos del buffer
Limpiar el buffer, para prepararlo para una próxima lectura o escritura
Se puede limpiar con
clear() - El buffer se borra completamente
compact() - Se borran del buffer los datos que ya se ha leido, pero no los pendientes de leer (estos se
ponen al principio del buffer). Una próxima acción de escritura escribe a continuación de los daros no
leídos
NIO - Definición
BUFFERS
4
1
2
3
4
5
TemariodecursoJavaSE©IñakiMartín

17.- NIO NIO - Definición 5
Características de un buffer
๏ Un buffer tiene cuatro conceptos que explican su funcionamiento en detalle: capacidad, posición y límite
★ Capacidad : Es el tamaño del buffer. No se puede sobrepasar en escritura.
★ Posición : Es la situación del puntero de escritura o lectura en el buffer.
Al escribir, la posición va desde "posición 0" hasta "posicion capacidad-1"
Al leer, cuando se invierte el buffer, la posición vuelve a ser inicialmente 0, y va creciendo en sucesivas lecturas
★ Límite : Es la cantidad disponible, y depende de si se lee o escribe:
Al escribir, el límite es la cantidad que se puede escribir, luego coincide con la capacidad
Al leer, el límite es la cantidad de datos escritos, con lo que coincide con la posición tras la ultima escritura
★ Marca : marca una posición, que se se crea con el método mark() y con reset() se vuelve a la position marcada
Dimensionando un buffer
๏ Un buffer tiene que ser dimensionado antes de poder usarse. Con dimensionar se crea y define la capacidad del buffer
๏ Se hace con el método allocate(tam), siendo tam el número de bytes que se dan de capacidad:
ByteBuffer byteBuffer = ByteBuffer.allocate(128);
๏ Existen varias clases para usar Buffers, cada una para trabajar con un tipo específico de dato:
‣ FloatBuffer
‣ IntBuffer
‣ LongBuffer
‣ ShortBuffer
‣ ByteBuffer
‣ MappedByteBuffer
‣ CharBuffer
‣ DoubleBuffer
Tipos de Buffers
TemariodecursoJavaSE©IñakiMartín

17.- NIO NIO - Definición 6
Dimensionando un buffer
๏ Un buffer tiene que ser dimensionado antes de poder usarse.
๏ Con dimensionar se crea y define la capacidad del buffer, de dos tipos
ByteBuffer byteBuffer = ByteBuffer.allocate(128);
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1200);
‣ Creación de buffer no directo:
Se hace con el método allocate(tam), siendo tam el número de bytes que se dan de capacidad:
‣ Creación de buffer directo:
Se hace con el método allocateDirect(tam), siendo tam el número de bytes que se dan de capacidad:
TemariodecursoJavaSE©IñakiMartín

17.- NIO NIO - Definición 7
Escribir y leer cadenas con Path y Files
๏ Con Path y Files, es útil si solo se escriben unos pocos caracteres (lee y escribe todo de golpe)
String linea = "linea 2 de ejemplo";
Path unPath = Paths.get("ejemploFicheroNio2.txt");
Files.write(unPath, linea.getBytes());
‣ Escribir
Path unPath = Paths.get("ejemploFicheroNio2.txt");
if (Files.isReadable(unPath)) { // comprobar que existe y piede leerse
byte[] arrBytes = Files.readAllBytes(unPath);
String leido = new String(arrBytes);
System.out.println(leido);
}
‣ Leer
TemariodecursoJavaSE©IñakiMartín

17.- NIO NIO - Definición 8
Leer y escribir cadenas en un buffer con RandomAccessFile
๏ Usando RandomAccessFile se puede controlar el flujo de lectura, pues se lee el tamaño de buffer
๏ Estos ejemplos leen un buffer de tamaño determinado;
ByteBuffer bb1 = ByteBuffer.allocate(30); // ha de ser suficiente !!!!
RandomAccessFile raf = new RandomAccessFile("ejemplo1.txt", "rw"); // debe existir
FileChannel fileChannel = raf.getChannel();
fileChannel.read(bb1);
String linealeida = new String(bb1.array()); // lee "linea 1 de ejemplo■■■■■■■■"
linealeida = linealeida.replaceAll(Character.toString((char)0),"");
System.out.println(linealeida);
fileChannel.close();
raf.close();
‣ Leer, leer los datos en un buffer, convertirlo a String y eliminar los char(0)
ByteBuffer bb1 = ByteBuffer.allocate(100);
String linea = "linea 1 de ejemplo";
bb1.put(linea.getBytes());
bb1.flip();
RandomAccessFile raf = new RandomAccessFile("ejemplo1.txt", "rw");
FileChannel fileChannel = raf.getChannel();
fileChannel.write(bb1);
fileChannel.close();
raf.close();
Como hemos usado
RandomAccessFile, que escribe bytes,
hemos pasado la cadena a escribir a
una array de bytes, con el método
getBytes()
‣ Para escribir, escribir los datos en el buffer, invertirlo, y hacer que el un channel los escriba en fichero
TemariodecursoJavaSE©IñakiMartín

17.- NIO NIO - Definición 9
Leer y escribir objetos en un buffer con ByteArrayOutput/InputStream
๏ Usando ByteArrayOutputStream se pueden escribir objetos en un fichero, y con ByteArrayInpoutStream leerlos
ObjectInputStream ois = null;
try {
Path unPath = Paths.get("ejemploFicheroNio5.txt");
byte[] data = Files.readAllBytes(unPath);
ois = new ObjectInputStream(new ByteArrayInputStream(data));
while (true) {
Avion av = (Avion) ois.readObject();
System.out.println(av.nombre);
System.out.println(av.potencia);
System.out.println(av.precio);
}
} catch (EOFException e) {
try {
baos.close();
ois.close(); // deberia estar en el finally, pero no me cabe :-)
} catch (IOException e1) { e1.printStackTrace(); }
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
‣ Leer
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
FileOutputStream fos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(new Avion("F14", 1234, 333.333));
oos.flush();
oos.writeObject(new Avion("F15", 4567, 444.444));
oos.flush();
fos = new FileOutputStream(new File("ejemploFicheroNio5.txt"));
fos.write(baos.toByteArray());
fos.flush();
oos.close(); // deberia estar en el finally, pero no me cabe :-)
baos.close();
} catch (Exception e) {
e.printStackTrace();
}
‣ Para escribir,

Más contenido relacionado

La actualidad más candente

Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en javaMaiirOn Gaitan
 
Flujos de Entrada y Salida en Java
Flujos de Entrada y Salida en JavaFlujos de Entrada y Salida en Java
Flujos de Entrada y Salida en JavaIngeniería Nica
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVAMichelle Torres
 
Entrada y Salida de datos en Java
Entrada y Salida de datos en JavaEntrada y Salida de datos en Java
Entrada y Salida de datos en Javakunno10
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y SalidaCristian Andres
 
Suarez l 2001 el paquete java io
Suarez l 2001 el paquete java ioSuarez l 2001 el paquete java io
Suarez l 2001 el paquete java ioLuis Lopez Ac
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAGabriel Suarez
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++mauro0210
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e ioprogramadorjavablog
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSDarwin Durand
 
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividadS2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividadLuis Fernando Aguas Bucheli
 
randomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ecrandomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ecSilvana Vargas
 

La actualidad más candente (18)

Flujos y archivos
Flujos y archivosFlujos y archivos
Flujos y archivos
 
Grupo nro4ficheros
Grupo nro4ficherosGrupo nro4ficheros
Grupo nro4ficheros
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
Flujos de Entrada y Salida en Java
Flujos de Entrada y Salida en JavaFlujos de Entrada y Salida en Java
Flujos de Entrada y Salida en Java
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVA
 
Entrada y Salida de datos en Java
Entrada y Salida de datos en JavaEntrada y Salida de datos en Java
Entrada y Salida de datos en Java
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y Salida
 
Suarez l 2001 el paquete java io
Suarez l 2001 el paquete java ioSuarez l 2001 el paquete java io
Suarez l 2001 el paquete java io
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Unidad 6: Flujos y Archivos Ejercicio 2
Unidad 6: Flujos y Archivos Ejercicio 2Unidad 6: Flujos y Archivos Ejercicio 2
Unidad 6: Flujos y Archivos Ejercicio 2
 
Progra
PrograProgra
Progra
 
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividadS2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
 
Unidad 6: Flujos y Archivos Ejercicio 1
Unidad 6: Flujos y Archivos Ejercicio 1Unidad 6: Flujos y Archivos Ejercicio 1
Unidad 6: Flujos y Archivos Ejercicio 1
 
randomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ecrandomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ec
 
Unidad 6: Flujos y Archivos Ejercicio 3
Unidad 6: Flujos y Archivos Ejercicio 3Unidad 6: Flujos y Archivos Ejercicio 3
Unidad 6: Flujos y Archivos Ejercicio 3
 

Similar a Jyoc java-cap17 persistencia. nio

Slides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4edSlides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4edIgnacio Sorribas
 
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
 
Understanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowUnderstanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowConferencias FIST
 
Historia de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoHistoria de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoJuan Sacco
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosJosé Antonio Sandoval Acosta
 
Caracteristicas generales de PHP
Caracteristicas generales de PHPCaracteristicas generales de PHP
Caracteristicas generales de PHPMiguel Pinto
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3Wally IG
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Textonakaryortegaleon
 
03. Archivos Completo Obliogatorio Para Imprimir.pdf
03. Archivos Completo Obliogatorio Para Imprimir.pdf03. Archivos Completo Obliogatorio Para Imprimir.pdf
03. Archivos Completo Obliogatorio Para Imprimir.pdfSiscoReparaciones
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Maztherprozh
 

Similar a Jyoc java-cap17 persistencia. nio (20)

Slides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4edSlides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4ed
 
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
 
Understanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowUnderstanding Advanced Buffer Overflow
Understanding Advanced Buffer Overflow
 
Manejo_archivos.ppt
Manejo_archivos.pptManejo_archivos.ppt
Manejo_archivos.ppt
 
Flujo datos
Flujo datosFlujo datos
Flujo datos
 
ARCHIVOS
ARCHIVOS ARCHIVOS
ARCHIVOS
 
Historia de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoHistoria de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan Sacco
 
C++
C++ C++
C++
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivos
 
Caracteristicas generales de PHP
Caracteristicas generales de PHPCaracteristicas generales de PHP
Caracteristicas generales de PHP
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3
 
Memoria I I
Memoria  I IMemoria  I I
Memoria I I
 
JAVA
JAVAJAVA
JAVA
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Desarrollo desoftware
Desarrollo desoftwareDesarrollo desoftware
Desarrollo desoftware
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
 
03. Archivos Completo Obliogatorio Para Imprimir.pdf
03. Archivos Completo Obliogatorio Para Imprimir.pdf03. Archivos Completo Obliogatorio Para Imprimir.pdf
03. Archivos Completo Obliogatorio Para Imprimir.pdf
 
Aprendizaje de Lenguaje de Programación Python
Aprendizaje de Lenguaje de Programación PythonAprendizaje de Lenguaje de Programación Python
Aprendizaje de Lenguaje de Programación Python
 
Utilización de la clase math
Utilización de la clase mathUtilización de la clase math
Utilización de la clase math
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_
 

Más de Jyoc X

Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc X
 
Jyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc X
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc X
 
Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)Jyoc X
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc X
 
Jyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc X
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc X
 
Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc X
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc X
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc X
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc X
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc X
 
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc X
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc X
 
Jyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc X
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc X
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc X
 
Jyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datosJyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datosJyoc X
 

Más de Jyoc X (19)

Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
 
Jyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc java-cap22 seguridad
Jyoc java-cap22 seguridad
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilas
 
Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fx
 
Jyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc java-cap13 recursividad
Jyoc java-cap13 recursividad
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepciones
 
Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 colecciones
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios poo
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetos
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
 
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)
 
Jyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc java-cap03 bucles
Jyoc java-cap03 bucles
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcaciones
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salida
 
Jyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datosJyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datos
 

Último

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 

Último (11)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 

Jyoc java-cap17 persistencia. nio

  • 1. TemariodecursoJavaSE©IñakiMartín
 17.- NIO TEMARIO DE CURSO PROGRAMACIÓN JAVA SE CAPÍTULO 17 PERSISTENCIA. FICHEROS NIO (New IO API para ficheros) © Iñaki MartínEste obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
  • 2. TemariodecursoJavaSE©IñakiMartín
 17.- NIO NOTA: Ante nada, se suponen para este tema conocimientos consolidados de la IO APi de java, tratada ya en capítulos anteriores • Desde Java 1.4 existe una nueva API para operar con ficheros, llamada NIO (New IO) • Está orientada a tratamiento de muchos trafico de poco tamaño y no continuo acceso, como un chat (mientras que la clase IO se acerca más al uso de tráfico de gran tamaño y conexiones continuadas) • NIO se basa en tres conceptos básicos: ‣ Channel : mecanismo de lectura/esctritura ‣ Buffer: area donde un channel lee/escribe ‣ Selector: es un objeto que puede monitorizar varios channels evaluando eventos (estado de una conexion, llegada o salida de datos , etc) • NIO aprovecha tambien la posibilidad de no bloquear operaciones IO (asincronismo de operaciones IO). Por ejemplo, un hilo puede pedir a una channel una lectura, y almacenarla en un buffer, y mientras que channel esta leyendo del fichero y almacenando en el buffer, el hilo puede continuar haciendo otras cosas, hasta que el channel acabe de escribir, con lo que el hilo puede volver para procesar el buffer obtenido NIO - Definición NIO 2
  • 3. TemariodecursoJavaSE©IñakiMartín
 17.- NIO ๏ Un channel es como un Stream del clásico IO de Java, con dos diferencias importantes: • Un channel vale para leer y para escribir, no solo para una de dichas cosas • Puede operar asíncronamente • Lee y escribe siempre en un Buffer ๏ Las clases de Channels mas usadas son: • FileChannel: Lee y escribe de ficheros • DatagramChannel: Lee y escribe datagramas, en un servicio UDP • SocketChannel: Lee y escribe en un servicio TCP • ServerSocketChannel: Atiende solicitudes de conexiones TCP NIO - Definición CHANNELS 3 RandomAccessFile raf = new RandomAccessFile("ejemploFicheroNio.txt", "rw"); FileChannel fileChannel = raf.getChannel(); ๏ Las manera mas sencilla de crear un Channel es desde un RandomAccessFile de java IO normal, usado el método genChannel() de dicha clase:
  • 4. TemariodecursoJavaSE©IñakiMartín
 17.- NIO ๏ Un buffer es una zona de memoria donde un channel escribe y lee ๏ Para acceder a esta memoria se usa un objeto de clase Buffer, y los métodos que dispone. Normalmente, el proceso de trabajo de leer (de algún sitio) con buffers exige cinco pasos: Crear y dimensionar el buffer Escribir en el buffer. Mientras se escribe, el buffer controla cuanto se va escribiendo Invertir el buffer , llamando al método flip() Este método pasa el buffer del modo escritura al modo lectura. Leer datos del buffer Limpiar el buffer, para prepararlo para una próxima lectura o escritura Se puede limpiar con clear() - El buffer se borra completamente compact() - Se borran del buffer los datos que ya se ha leido, pero no los pendientes de leer (estos se ponen al principio del buffer). Una próxima acción de escritura escribe a continuación de los daros no leídos NIO - Definición BUFFERS 4 1 2 3 4 5
  • 5. TemariodecursoJavaSE©IñakiMartín
 17.- NIO NIO - Definición 5 Características de un buffer ๏ Un buffer tiene cuatro conceptos que explican su funcionamiento en detalle: capacidad, posición y límite ★ Capacidad : Es el tamaño del buffer. No se puede sobrepasar en escritura. ★ Posición : Es la situación del puntero de escritura o lectura en el buffer. Al escribir, la posición va desde "posición 0" hasta "posicion capacidad-1" Al leer, cuando se invierte el buffer, la posición vuelve a ser inicialmente 0, y va creciendo en sucesivas lecturas ★ Límite : Es la cantidad disponible, y depende de si se lee o escribe: Al escribir, el límite es la cantidad que se puede escribir, luego coincide con la capacidad Al leer, el límite es la cantidad de datos escritos, con lo que coincide con la posición tras la ultima escritura ★ Marca : marca una posición, que se se crea con el método mark() y con reset() se vuelve a la position marcada Dimensionando un buffer ๏ Un buffer tiene que ser dimensionado antes de poder usarse. Con dimensionar se crea y define la capacidad del buffer ๏ Se hace con el método allocate(tam), siendo tam el número de bytes que se dan de capacidad: ByteBuffer byteBuffer = ByteBuffer.allocate(128); ๏ Existen varias clases para usar Buffers, cada una para trabajar con un tipo específico de dato: ‣ FloatBuffer ‣ IntBuffer ‣ LongBuffer ‣ ShortBuffer ‣ ByteBuffer ‣ MappedByteBuffer ‣ CharBuffer ‣ DoubleBuffer Tipos de Buffers
  • 6. TemariodecursoJavaSE©IñakiMartín
 17.- NIO NIO - Definición 6 Dimensionando un buffer ๏ Un buffer tiene que ser dimensionado antes de poder usarse. ๏ Con dimensionar se crea y define la capacidad del buffer, de dos tipos ByteBuffer byteBuffer = ByteBuffer.allocate(128); ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1200); ‣ Creación de buffer no directo: Se hace con el método allocate(tam), siendo tam el número de bytes que se dan de capacidad: ‣ Creación de buffer directo: Se hace con el método allocateDirect(tam), siendo tam el número de bytes que se dan de capacidad:
  • 7. TemariodecursoJavaSE©IñakiMartín
 17.- NIO NIO - Definición 7 Escribir y leer cadenas con Path y Files ๏ Con Path y Files, es útil si solo se escriben unos pocos caracteres (lee y escribe todo de golpe) String linea = "linea 2 de ejemplo"; Path unPath = Paths.get("ejemploFicheroNio2.txt"); Files.write(unPath, linea.getBytes()); ‣ Escribir Path unPath = Paths.get("ejemploFicheroNio2.txt"); if (Files.isReadable(unPath)) { // comprobar que existe y piede leerse byte[] arrBytes = Files.readAllBytes(unPath); String leido = new String(arrBytes); System.out.println(leido); } ‣ Leer
  • 8. TemariodecursoJavaSE©IñakiMartín
 17.- NIO NIO - Definición 8 Leer y escribir cadenas en un buffer con RandomAccessFile ๏ Usando RandomAccessFile se puede controlar el flujo de lectura, pues se lee el tamaño de buffer ๏ Estos ejemplos leen un buffer de tamaño determinado; ByteBuffer bb1 = ByteBuffer.allocate(30); // ha de ser suficiente !!!! RandomAccessFile raf = new RandomAccessFile("ejemplo1.txt", "rw"); // debe existir FileChannel fileChannel = raf.getChannel(); fileChannel.read(bb1); String linealeida = new String(bb1.array()); // lee "linea 1 de ejemplo■■■■■■■■" linealeida = linealeida.replaceAll(Character.toString((char)0),""); System.out.println(linealeida); fileChannel.close(); raf.close(); ‣ Leer, leer los datos en un buffer, convertirlo a String y eliminar los char(0) ByteBuffer bb1 = ByteBuffer.allocate(100); String linea = "linea 1 de ejemplo"; bb1.put(linea.getBytes()); bb1.flip(); RandomAccessFile raf = new RandomAccessFile("ejemplo1.txt", "rw"); FileChannel fileChannel = raf.getChannel(); fileChannel.write(bb1); fileChannel.close(); raf.close(); Como hemos usado RandomAccessFile, que escribe bytes, hemos pasado la cadena a escribir a una array de bytes, con el método getBytes() ‣ Para escribir, escribir los datos en el buffer, invertirlo, y hacer que el un channel los escriba en fichero
  • 9. TemariodecursoJavaSE©IñakiMartín
 17.- NIO NIO - Definición 9 Leer y escribir objetos en un buffer con ByteArrayOutput/InputStream ๏ Usando ByteArrayOutputStream se pueden escribir objetos en un fichero, y con ByteArrayInpoutStream leerlos ObjectInputStream ois = null; try { Path unPath = Paths.get("ejemploFicheroNio5.txt"); byte[] data = Files.readAllBytes(unPath); ois = new ObjectInputStream(new ByteArrayInputStream(data)); while (true) { Avion av = (Avion) ois.readObject(); System.out.println(av.nombre); System.out.println(av.potencia); System.out.println(av.precio); } } catch (EOFException e) { try { baos.close(); ois.close(); // deberia estar en el finally, pero no me cabe :-) } catch (IOException e1) { e1.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } ‣ Leer ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; FileOutputStream fos = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(new Avion("F14", 1234, 333.333)); oos.flush(); oos.writeObject(new Avion("F15", 4567, 444.444)); oos.flush(); fos = new FileOutputStream(new File("ejemploFicheroNio5.txt")); fos.write(baos.toByteArray()); fos.flush(); oos.close(); // deberia estar en el finally, pero no me cabe :-) baos.close(); } catch (Exception e) { e.printStackTrace(); } ‣ Para escribir,