Appunti InputOutput Java
Appunti InputOutput Java
L'I/O in Java è definito in termini di stream (flussi). Gli stream sono un'astrazione di
alto livello per rappresentare la connessione a un canale di comunicazione.
Il canale di comunicazione può essere costituito fra entità molto diverse, le più
importanti delle quali sono:
un file;
una connessione di rete (ad esempio TCP/IP);
un buffer in memoria.
Tutto ciò che viene scritto sul canale tramite l'OutputStream viene letto dall'altra parte dal
corrispondente InputStream.
sono FIFO: ciò che viene scritto da un OutputStream viene letto nello stesso
ordine dal corrispondente InputStream;
sono ad accesso sequenziale: non è fornito alcun supporto per l'accesso casuale
(solo la classe RandomAccessFile, che però non è uno stream, offre tale tipo di
accesso);
sono read-only oppure write-only: uno stream consente di leggere (InputStream)
o scrivere (OutputStream) ma non entrambe le cose. Se ambedue le funzioni sono
richieste, ci vogliono 2 distinti stream: questo è un caso tipico delle connessioni di
rete, tant'è che da una connessione (Socket) si ottengono due stream, uno in
scrittura e uno in lettura;
sono bloccanti: la lettura blocca il programma che l'ha richiesta finché i dati non
sono disponibili. Analogamente, la scrittura blocca il richiedente finché non è
completata;
quasi tutti i loro metodi possono generare eccezioni.
E' la classe astratta dalla quale derivano tutti gli stream finalizzati alla lettura da un
canale di comunicazione.
Costruttore
public InputStream();
Vuoto.
Legge e restituisce un byte (range 0-255) o si blocca se non c'è niente da leggere.
Restituisce il valore -1 se incontra la fine dello stream.
public int read(byte[] buf) throws IOException;
Legge fino a riempire l'array buf, o si blocca se non ci sono abbastanza dati. Restituisce
il numero di byte letti, o il valore -1 se incontra la fine dello stream. L'implementazione
di default chiama tante volte la read(), che è astratta.
public int read(byte[] buf, int off, int len) throws IOException;
Legge fino a riempire l'array buf, a partire dalla posizione off, con len byte (o fino alla
fine dell'array). Si blocca se non ci sono abbastanza dati. Restituisce il numero di byte
letti, o il valore -1 se incontra la fine dello stream. L'implementazione di default chiama
tante volte la read(), che è astratta.
public int available() throws IOException;
Restituisce il numero di byte che possono essere letti senza bloccarsi (cioè che sono
disponibili):
con un file: quelli che rimangono da leggere fino alla fine del file;
con una connessione di rete: anche 0, se dall'altra parte non è ancora stato
mandato nulla.
public void close() throws IOException;
Chiude lo stream e rilascia le risorse ad esso associate. Eventuali dati non ancora letti
vengono perduti.
Questi metodi, e anche gli altri non elencati, sono supportati anche dalle classi derivate,
e quindi sono disponibili sia che si legga da file, da un buffer di memoria o da una
connessione di rete.