Newsgroup: it.comp.java
Titolo: OutputStream informazioni

Salve ragazzi,
mi sono avvicinato da poco agli stream e non ho capito bene come funzionano, 
sebbene stia leggendo un manuale di java.
Dunque da quello che ho capito ogni oggetto che usi gli sream è una 
sottoclasse di OutputStream e InputSream e per poter essere costruito ha 
bisogno come costruttore proprio di un OutputStream. Questo è strano, se io 
per costruire, per esempio, un ObjectOutputStream ho bisogno di un 
OutputStream, come costruisco l'OutputStream, dato che è una classe 
astratta????
Per favore aiutatemi, non sto capendo più niente 



InputStream e OutputStream sono le più estreme generalizzazioni di un flusso
di byte, rispettivamente in ingresso e in uscita. Quando dici che "usi" uno
stream, significa che hai un riferimento ad un oggetto che estende
InputStream o OutputStream, e che sei in grado di richiamarde almeno i
metodi read() e write(). E sono classi astratte perche sono appunto
generiche, raggruppando operazioni comuni a tutti i generi di stream.
Se tu, in una tua classe, pubblichi dei metodi dove dichiari di accettare
tra i parametri un InputStream o un OutputStream generico, stai dando la
maggiore libertà possibile a chi usa la tua classe, potendo fornigli un
punto di scambio di informazioni compatibile praticamente con tutto.
Esistono poi delle implementazioni specifiche di InputStream e OutputStream,
che puoi creare quando necessario. Tra le classi in 
java.io
 puoi trovare
(per farti degli esempi):
- FileInputStream/FileOutputStream -
permettono di leggere/scrivere sequenzialmente su un file fisico.
- BufferedInputStream/BufferedOutputStream -
accelerano molto l'uso di altri Stream, rispettivamente leggendo in anticipo
dal flusso / accumulando i byte in uscita per scriverli sulla destinazione
in una volta sola (operazioni bufferizzate appunto). Puoi costruirli solo a
partire da Input/OutputStream già pronti.
- ByteArrayInputStream/ByteArrayOutputStream -
Ottimi da usare per gestire buffer temporanei in memoria.
- ObjectInputStream/ObjectOutputStream -
Usati per la serializzazione/deserializzazione di oggetti.
- DataInputStream/DataOutputStream -
Usati per la serializzazione/deserializzazione di variabili primitive
Nel package java.lang c'è la classe System che pubblica tre oggetti statici
(che conosciamo tutti immagino):
System.in (InputStream)
System.out (PrintStream)
System.err (PrintStream)
Vi sono poi classi in altri package che si "aprono" all'esterno fornendo
loro stesse degli InputStream/OutputStream. Le implementazioni di questi
stream sono nascoste, ma a te basta sapere che puoi leggerci e scriverci
sopra, preoccupandoti solo delle eccezioni specificate nella documentazione.
Un esempio per tutti: java.net.Socket
Questa classe pubblica due metodi: getInputStream() e getOutputStream(). Più
che sufficiente a rappresentare il flusso bidirezionale di un socket tcp/ip.
Un esempio un po' più particolare: javax.comm.CommPort (Communication API)
Una volta che sei stato in grado di ottenere un riferimento ad una CommPort
(porta seriale o parallela), puoi usare getInputStream() e getOutputStream()
per poter comunicare con l'esterno.
Spero di averti chiarito un po' di più le idee.
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx/
(per rispondere personalmente leva IlDitoDalCulo)

 ha scritto nel messaggio 
news:2vbor0F...@uni-berlin.de...
