SlideShare una empresa de Scribd logo
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 Java
Ingeniería Nica
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVA
Michelle 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 Java
kunno10
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y Salida
Cristian 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 io
Luis 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 JAVA
Gabriel 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, recursividad
Luis 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.ec
Silvana 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 4ed
Ignacio 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
 
Manejo_archivos.ppt
Manejo_archivos.pptManejo_archivos.ppt
Manejo_archivos.ppt
Daniel Carpio Contreras
 
ARCHIVOS
ARCHIVOS ARCHIVOS
ARCHIVOS
ARLO SOLIS
 
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
Juan 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 archivos
José Antonio Sandoval Acosta
 
Caracteristicas generales de PHP
Caracteristicas generales de PHPCaracteristicas generales de PHP
Caracteristicas generales de PHP
Miguel Pinto
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3Wally IG
 
JAVA
JAVAJAVA
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Desarrollo desoftware
Desarrollo desoftwareDesarrollo desoftware
Desarrollo desoftware
CEDSA-Colegio Domingo Savio
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
nakaryortegaleon
 
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
SiscoReparaciones
 
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
Cesar Oswaldo Osorio Agualongo
 
Utilización de la clase math
Utilización de la clase mathUtilización de la clase math
Utilización de la clase math
Fernando Omar Arciniega Martinez
 
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 unit
Jyoc X
 
Jyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc java-cap22 seguridad
Jyoc java-cap22 seguridad
Jyoc X
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
Jyoc 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 pilas
Jyoc 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 fx
Jyoc X
 
Jyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc java-cap13 recursividad
Jyoc java-cap13 recursividad
Jyoc X
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepciones
Jyoc X
 
Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 colecciones
Jyoc 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 enumerados
Jyoc X
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios poo
Jyoc X
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetos
Jyoc X
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
Jyoc 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 bucles
Jyoc X
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcaciones
Jyoc 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-salida
Jyoc 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 datos
Jyoc 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

ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
IsabelQuintero36
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
aljitagallego
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
AMADO SALVADOR
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
SERVANDOBADILLOPOLEN
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 

Último (20)

ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 

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,