2010-03-11 8 views
14

Oggi ho questa domanda per cui penso di aver risposto molto male. Ho detto che il flusso è un dato che scorre e il lettore è una tecnica in cui leggiamo che si tratta di dati statici. So che questa è una risposta terribile, quindi per favore forniscimi la differenza e le definizioni chiare tra questi due con l'esempio in Java.Qual è la differenza tra un flusso e un lettore in Java?

Grazie.

risposta

11

Come altri hanno già detto, i casi d'uso per ciascuna sono leggermente diversi (anche se spesso possono essere usati in modo intercambiabile)

Poiché i lettori sono per la lettura di caratteri, sono meglio quando si ha a che fare con l'ingresso è di natura testuale (o dati rappresentati come caratteri). Dico meglio perché i lettori (nel contesto dell'uso tipico) sono essenzialmente flussi di metodi che facilitano facilmente la lettura dell'input dei caratteri.

+1

+1 che è davvero il punto, un Reader è generalmente supportato da un InputStream di qualche tipo (non sempre - vedi StringReader) ed esegue una conversione di byte in caratteri unicode a 16 bit . – Yishai

9

Stream è per la lettura di byte, Reader è per la lettura di caratteri. Un personaggio può richiedere un byte o più, a seconda del set di caratteri.

+0

un carattere è atleast 2 byte in java, corretto? –

+0

Durante la lettura dal flusso, la mappatura tra byte e caratteri è data dalla codifica. Per UTF-8 un carattere può essere compreso tra 1 e 6 byte. –

16

Un InputStream è orientato ai byte. A Reader è orientato al carattere.

I javadoc sono tuoi amici, spiegando la differenza. Reader, InputStream

+3

Senza dire RTFM. –

+0

cos'è l'espansione di RTFM? – bragboy

+3

RTFM == Leggi il Manuale F *** – NomeN

5

Le classi di flusso sono classi orientate ai byte, ovvero tutte le classi InputStream (bufferizzate e non bufferizzate) leggere byte per byte dallo stream e tutte le classi OutputStream (bufferizzate e non bufferizzate) scrivono i dati byte per byte nello stream . Le classi di flusso sono utili quando si hanno piccoli dati o se si hanno a che fare con file binari come le immagini.

D'altra parte Reader/Writer sono classi basate sui caratteri. Queste classi leggono o scrivono un carattere alla volta da o in streaming. Queste classi si estendono o java.io.Reader (tutte le classi di input dei caratteri) o java.io.Writer (tutte le classi di output dei caratteri). Queste classi sono utili se hai a che fare con file di testo o altri flussi testuali. Queste classi sono anche Buffered e Non-Buffered.

Problemi correlati