• No se han encontrado resultados

3.9 Streams y Archivos Streams Básicos 18/04/2004. API de InputStream (1/2) Streams de Bytes y Caracteres. API de OutputStream

N/A
N/A
Protected

Academic year: 2021

Share "3.9 Streams y Archivos Streams Básicos 18/04/2004. API de InputStream (1/2) Streams de Bytes y Caracteres. API de OutputStream"

Copied!
5
0
0

Texto completo

(1)

3.9 Streams y

Archivos

Streams, clases, archivos,

streams de objetos y

serialización

3.9.1 Streams Básicos

Streams de Bytes y Caracteres

l E/S es en principio una secuencia de bytes

l Ejemplo: Archivo, dispositivo, conexión red, etc.

l Java provee dos clases básicas para bytes:

l InputStream: Secuencia de bytes de entrada

l OutputStream: Secuencia de bytes de salida

l Estas clases no son convenientes para manejo de Unicode (un carácter tiene 16 bits), ∴se define:

l Reader: Entrada de caracteres Unicode

l Writer: Salida de caracteres Unicode

l De estas cuatro clases abstractas Java deriva las demás clases

API de

InputStream (1/2)

l abstract int read()

l Lee un byte de entrada (retorna -1 se llega al final) l int read(byte[] b)

l Lee un arreglo de bytes (lee a lo más b.length bytes)

l Retorna bytes leídos (retorna -1 si está al final) l int read(byte[] b, int off, int largo)

l Lee un arreglo de bytes (lee a lo más b.length bytes)

l Retorna bytes leídos (retorna -1 si está al final)

l off: offset en arreglob

l largo: Máximo # de bytes a leer

API de

InputStream (2/2)

l long skip(long n)

l Salta nbytes en la entrada (retorna # de bytes saltados) l int avalaible ()

l Retorna # de bytes disponibles sin bloquear l void close()

l Cierra entrada l void mark(int lim)

l Coloca marca en posición actual. Se borra al leer limbytes l void reset()

l Vuelve a posición de última marca l boolean markSupported()

l retorna verdadero si soporta marcas

API de

OutputStream

l abstract void write(int n)

l Escribe un byte de datos l void write(byte [] b)

l Escribe todos los bytes en el arreglo b

l void write(byte [] b, int off, int largo)

l Escribe largobytes desde posición offen el arreglo b

l void close()

l Cierra la salida l void flush()

(2)

API de Reader y Writer

l

Reader

lint read()

lint read(char cbuf[])

lint read(char cbuf[], int offset, int largo)

l

Writer

lint write(int c)

lint write(char cbuf[])

lint write(char cbuf[], int offset, int largo)

Conjunto de Streams

l

Java provee más de 60 clases de streams

l

Todas las clases se derivan de las 4 clases

básicas

l

Clases básicas sólo permiten leer o escribir

bytes o caracteres

Subclases de Reader y Writer

Subclases de

OutputStream

InputStream y

Composición de Streams

l Los streams se pueden componer para lograr la funcionalidad deseada

l Ejemplo:

l FileInputStreampermite leer bytes desde un archivo

l Java provee algunas clases que permiten ensamblar bytes en tipos de datos útiles (e.g. DataInputStreamy

PrintWriter)

l Java permite combinarlos para lograr, por ejemplo leer números de un archivo

Ejemplos de Streams de

Filtrado

FileInputStream fin = new FileInputStream(“miArchivo.txt”) DataInputStream din = new DataInputStream(fin); double d = din.realDouble();

PushbackInputStream pbin = new PushbackInputStream (new BufferedInputStream

(new FileInputStream(“miArchivo.txt”))); ...

(3)

3.9.2 Archivos

Clases Básicas de Archivos

l

FileReader

. Lectura de caracteres

l

FileWriter

. Escritura de caracteres

l

FileInputStream

. Lectura de bytes

l

FileOutputStream

. Escritura de bytes

Constructores para Archivos

l Las cuatro clases anteriores aceptan tres tipos de

constructores

l FileInputStream in = new

FileInputStream (“miArchivo”); l File f = new File(“miArchivo”)

FileInputStream in = new FileInputStream(f); l FileDescriptor fd = ...;

FileInputStream in = new FileInputStream(fd); FileInputStream in = new

FileInputStream(archivoEntrada); FileOutputStream out = new

FileOutputStream(archivoSalida);

Ejemplo: Copia de Archivo

import java.io.*;

public class Copy {

public staticvoid main(String[] args) throws IOException {

File archivoEntrada = new File(”Entrada.txt"); File archivoSalida = new File(”Salida.txt"); FileReader in = new FileReader(archivoEntrada); FileWriter out = new FileWriter(archivoSalida); int c; while ((c = in.read()) != -1) out.write(c); in.close(); out.close(); } }

Clase

File

l

No corresponde a un stream (se deriva de

Object

), que permite tener repesentación

abstracta de archivos y directorios

l

Está definida en

paquete java.io

l

Posee métodos tales como:

lCrear directorio, renombrar, borrar, sendero del archivo, listar directorio, etc.

Clase

RandomAccessFile

l

int skipBytes(int)

lMueve el puntero el # de bytes indicado hacia adelante

l

void seek(long)

lPosiciona el puntero justo antes del byte especificado

l

long getFilePointer()

(4)

Streams y Archivos ZIP

l Se usan para archivar uno o más archivos en formato comprimido (GZIP o ZIP)

l Cada archivo tiene un cabecera con información tal como:

l Nombre del archivo, método de compresión

l Para procesar una entrada se deben leer las entradas l Java provee cuatro clases para compresión

definidas en paquete java.util.zip.*:

l ZipInputStream. Stream de entrada comprimida

l ZipOutputStream. Stream de salida comprimida

l ZipEntry. Describe una entrada

l ZipFile. Archivo ZIP

3.9.3 Streams

Especiales

Streams de Buffering

l

BufferedInputStream

lPermite usar buffer de entrada para leer sin causar un acceso a dispositivo en cada operación

l

BufferedOutputStream

lIdem para salida

l

PushbackInputStream

lPermite devolver datos al stream

Clases DataInput y DataOutput

l boolean readBoolean () l byte readByte() l char readChar() l double readDouble() l float readFloat() l int readInt() l String readLine() l long readLong() l short readShort () void writeBolean(boolean b) void writeByte(byte b) void writeChar(char c) void writeChars(String s) void writeDouble (double d) void writeFloat(float f) void writeInt(int i) void writeLong (long l) writeShort(short s)

¡Leen y escriben en binario!

Clase

PrintWriter

l Permite escribir texto formateado

(no se especifica destinatario)

l void print(Object) l void print(String s) l void println(String s) l void print(char[] s) l void print(char c) l void print(int i) l etc.

Ejemplo de

PrintWriter

PrintWriter out = new PrintWriter ( new FileOutputStream (“miArchivo”)); ...

out.print(“Esta es una prueba ”); out.print(2002);

... Especifica

(5)

System.in y System.out

l

System.out es un PrintStream

lSystem.out.println(“....”);

l

System.in es un InputStream

l¿Cómo leer desde el teclado?

java.io.BufferedReaderbr; try{ br = new java.io.BufferedReader( new java.io.InputStreamReader(System.in)); Stringstr= br.readLine(); System.out.println("Ud ingreso "+str); }catch(java.io.IOExceptionioe ){ }

Resumen

l

Los streams son el mecanismo básico de

Java para proveer E/S y son parte de

java.io

l

Streams se pueden componer para lograr el

servicio deseado

Referencias

Documento similar

Debido al riesgo de producir malformaciones congénitas graves, en la Unión Europea se han establecido una serie de requisitos para su prescripción y dispensación con un Plan

4) Restoration activities led to a significant positive change in the benthic community in terms of spatial and temporal variability. 5) Only the 1-GOLD metric had the capacity

There is no context deformation in this application, but each news item is mapped to a point in the context space, and the relevance of the news is a function of their distance from

Lo más característico es la aparición de feldespatos alcalinos y alcalino térreos de tamaño centimétrico y cristales alotriomorfos de cuarzo, a menudo en agregados policristalinos,

[r]

[r]

[r]

GARCIA de JALON (1980) has studied the changes in stream benthic communities caused by the Pinilla reservoir in the Lozoya river (Central Spain), which is used for water