PDF de programación - Sesión 5: Serialización de datos

Imágen de pdf Sesión 5: Serialización de datos

Sesión 5: Serialización de datosgráfica de visualizaciones

Publicado el 2 de Febrero del 2019
425 visualizaciones desde el 2 de Febrero del 2019
126,3 KB
22 paginas
Creado hace 11a (26/09/2012)
Experto Universitario Java Enterprise

Lenguaje Java Avanzado

Sesión 5: Serialización de datos



© 2012-2013 Depto. Ciencia de la Computación e IA





Experto Universitario Java Enterprise

Índice

• Introducción a los flujos de E/S
• Entrada y salida estándar
• Acceso a ficheros
• Acceso a recursos
• Acceso a URLs
• Codificación de datos
• Serialización de objetos

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-2



Experto Universitario Java Enterprise

Flujos de E/S
• Las aplicaciones muchas veces necesitan enviar datos a un

determinado destino o leerlos de una determinada fuente
• Ficheros en disco, red, memoria, otras aplicaciones, etc
• Esto es lo que se conoce como E/S

• Esta E/S en Java se hace mediante flujos (streams)

• Los datos se envían en serie a través del flujo
• Se puede trabajar de la misma forma con todos los flujos,

independientemente de su fuente o destino

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-3



Experto Universitario Java Enterprise

Tipos de flujos según el tipo de datos

• Según el tipo de datos que transportan, distinguimos
• Flujos de bytes (con sufijos InputStream y OutputStream)
• Flujos de caracteres (con sufijos Reader y Writer)

• Superclases

Bytes
Caracteres

Entrada
InputStream

Salida
OutputStream

Reader

Writer

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-4



Experto Universitario Java Enterprise

Tipos de flujos según su propósito
• Distinguimos:

• Canales de datos

Simplemente llevan datos de una fuente a un destino
Ficheros: FileInputStream, FileReader,

FileOutputStream, FileWriter

Memoria: ByteArrayInputStream, CharArrayReader, ...
Tuberías: PipedInputStream, PipedReader, PipedWriter, ...

• Flujos de procesamiento

Realizan algún procesamiento con los datos
Impresión: PrintWriter, PrintStream
Conversores de datos: DataOutputStream, DataInputStream
Bufferes: BufferedReader, BufferedInputStream, ...

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-5



Experto Universitario Java Enterprise

Acceso a los flujos
• Todos los flujos tienen una serie de métodos básicos

Flujos

Métodos

InputStream, Reader

read, reset, close

OutputStream, Writer

write, flush, close

• Los flujos de procesamiento

• Se construyen a partir de flujos canales de datos
• Los extienden proporcionando métodos de más alto nivel, p.ej:

Flujos

BufferedReader

DataOutputStream

Métodos

readLine

writeInt, writeUTF,...

PrintStream, PrintWriter

print, println

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-6



Experto Universitario Java Enterprise

Objetos de la E/S estándar

• En Java también podemos acceder a la entrada, salida y salida de error

estándar

• Accedemos a esta E/S mediante flujos
• Estos flujos se encuentran como propiedades estáticas de la clase System

Entrada

Salida

Tipo de flujo

Propiedad

InputStream

System.in

PrintStream

System.out

Salida de error

PrintStream

System.err

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-7



Experto Universitario Java Enterprise

Salida estándar
• La salida estándar se ofrece como flujo de procesamiento PrintStream

• Con un OutputStream a bajo nivel sería demasiado incómoda la escritura

• Este flujo ofrece los métodos print y println que permiten imprimir

cualquier tipo de datos básico
• En la salida estándar

System.out.println(“Hola mundo”);

• En la salida de error
System.err.println(“Error”);

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-8



Experto Universitario Java Enterprise

Flujos de ficheros

• Canales de datos para acceder a ficheros

Caracteres
Binarios

Entrada

FileReader

Salida

FileWriter

FileInputStream

FileOutputStream

• Se puede acceder a bajo nivel directamente de la misma forma que para cualquier

flujo

• Podemos construir sobre ellos flujos de procesamiento para facilitar el acceso de

estos flujos

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-9



Experto Universitario Java Enterprise

Lectura y escritura de ficheros

public void copia_fichero() {
int c;
try {
FileReader in = new FileReader("fuente.txt");
FileWriter out = new FileWriter("destino.txt");
while( (c = in.read()) != -1)
{
out.write(c);
}
in.close();
out.close();
} catch(FileNotFoundException e1) {
System.err.println("Error: No se encuentra el fichero");
} catch(IOException e2) {
System.err.println("Error leyendo/escribiendo fichero");
}
}

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-10



Experto Universitario Java Enterprise

Uso de flujos de procesamiento

public void escribe_fichero() {
FileWriter out = null;
PrintWriter p_out = null;
try {
out = new FileWriter("result.txt");
p_out = new PrintWriter(out);
p_out.println("Este texto será escrito en el fichero");
} catch(IOException e) {
System.err.println("Error al escribir en el fichero");
} finally {
p_out.close();
}
}

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-11



Experto Universitario Java Enterprise

Sistema de ficheros
• La clase File contiene utilidades para trabajar con el sistema de

ficheros
• Constantes para indicar los separadores de directorios (‘/’ ó ‘\’)

Hace las aplicaciones independientes de la plataforma

• Crear, borrar o renombrar ficheros y directorios
• Listar los ficheros de un directorio
• Comprobar y establecer los permisos sobre ficheros
• Obtener la ruta de un fichero
• Obtener datos sobre ficheros (tamaño, fecha, etc)
• Etc...

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-12



Experto Universitario Java Enterprise

Acceso a recursos

• Los recursos incluidos en un JAR no se encuentran directamente en

el sistema de ficheros
• No podremos utilizar los objetos anteriores para acceder a ellos

• Accedemos a un recurso en el JAR con

getClass().getResourceAsStream(“/datos.txt”);

• Anteponiendo ‘/’ se busca de forma relativa al raíz del JAR
• Si no, buscará de forma relativa al directorio correspondiente al

paquete de la clase actual

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-13



Experto Universitario Java Enterprise

URLs
• URL = Uniform Resource Locator

• Cadena para localizar los recursos en Internet

• Se compone de

protocolo://servidor[:puerto]/recurso

• P.ej. http://www.ua.es/es/index.html
Se conecta al servidor www.ua.es
A través del puerto por defecto (puerto 80)
Utilizando protocolo HTTP para comunicarse
Solicita el recurso /es/index.html

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-14



Experto Universitario Java Enterprise

URLs en Java
• Se encapsulan en la clase URL

URL url = new URL("http://www.ua.es/es/index.html");

• Es obligatorio especificar el protocolo
• P.ej. www.ua.es es una URL mal formada

• Si la URL está mal formada se producirá una excepción

MalformedURLException

try {
URL url = new URL("http://www.ua.es/es/index.html");
} catch(MalformedURLException e) {
System.err.println("Error: URL mal construida");
}

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-15



Experto Universitario Java Enterprise

Lectura del contenido
• Podemos leer el contenido de la URL abriendo un flujo de entrada con

InputStream in = url.openStream();

• Leeremos de este flujo de la misma forma que con cualquier otro flujo

• Con los métodos a bajo nivel (byte a byte)
• O utilizando un flujo de procesamiento

• P.ej, si la URL corresponde a un documento HTML obtendremos el

código fuente de este documento

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-16



Experto Universitario Java Enterprise

Codificación
• Podemos codificar de forma sencilla los datos para enviarlos a través

de un flujo de bytes (en serie)

• Utilizaremos un flujo DataOutputStream

String nombre = "Jose";
int edad = 25;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(nombre);
dos.writeInt(edad);

dos.close();
baos.close();

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-17



Experto Universitario Java Enterprise

Descodificación

• Para descodificar estos datos del flujo realizaremos el proceso

inverso

• Utilizamos un flujo DataInputStream

ByteArrayInputStream bais = new ByteArrayInputStream(datos);
DataInputStream dis = new DataInputStream(bais);

String nombre = dis.readUTF();
int edad = dis.readInt();

dis.close();
bais.close();

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-18



Experto Universitario Java Enterprise

Entrada/Salida de objetos

• Si queremos enviar un objeto a través de un flujo deberemos

convertirlo a una secuencia de bytes

• Esto es lo que se conoce como serialización

• Java serializa automáticamente los objetos

• Obtiene una codificación del objeto en forma de array de bytes
• En este array se almacenarán los valores actuales de todos los campos del

objeto serializado

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

Serialización-19



Experto Universitario Java Enterprise

Objetos serializables
• Para que un objeto sea serializable debe cumplir:
• Implementar la interfaz Serializable

public MiClase implements Serializable {

...

}

Esta interfaz no obliga a definir ningún método, sólo marca el o
  • Links de descarga
http://lwp-l.com/pdf15040

Comentarios de: Sesión 5: Serialización de datos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad