Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni

Appunti InputOutput Java

Appunti di java

Caricato da

g.mastrota1981
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni

Appunti InputOutput Java

Appunti di java

Caricato da

g.mastrota1981
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 2

Input/Output in Java e classe InputStream

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.

Grazie all'astrazione rappresentata dagli stream, le operazioni di I/O dirette a (o


provenienti da) uno qualunque degli oggetti di cui sopra sono realizzate con la stessa
interfaccia.

Uno stream rappresenta un punto terminale di un canale di comunicazione


unidirezionale, e può leggere dal canale (InputStream) o scrivervi (OutputStream):

Tutto ciò che viene scritto sul canale tramite l'OutputStream viene letto dall'altra parte dal
corrispondente InputStream.

Gli stream hanno diverse proprietà:

 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.

Metodi più importanti


public abstract int read() throws IOException;

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.

Potrebbero piacerti anche