2012-07-17 12 views
6

Qual è la differenza trabisogno di dati flusso di input

FileInputStream fstream = new FileInputStream ("file1.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 

e

FileInputStream fstream = new FileInputStream ("file1.txt"); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

Abbiamo davvero bisogno di un DataInputStream qui?

+1

prega di non utilizzare DataInputStream se si desidera leggere il testo, la sua più confuso di utile. –

risposta

2

La cosa significativa dell'oggetto passato al costruttore InputStreamReader() è che sarà l'oggetto che sopporterà il peso di eventuali ritardi di sincronizzazione. Se non vuoi che il tuo FileInputStream sia trattenuto da molte chiamate, allora la seconda opzione è la strada da percorrere. Vedi the source of Reader.

1

Dipende, Un flusso di input dati consente a un'applicazione di leggere i tipi di dati Java primitivi da un flusso di input sottostante in modo indipendente dalla macchina. Un'applicazione utilizza un flusso di output di dati per scrivere dati che possono essere successivamente letti da un flusso di input di dati. Controllo JavaDoc

BufferedReader: legge il testo da un flusso di input di caratteri, memorizzando i caratteri in modo da fornire una lettura efficiente di caratteri, matrici e linee.

FileInputStream: Utilizzando FileInputStream, leggere i dati del file in byte.

2

FileInputStream è pensato per la lettura di flussi di byte non elaborati come i dati di immagine . Per leggere flussi di caratteri, prendere in considerazione l'utilizzo di FileReader.

Un flusso di input dati consente a un'applicazione di leggere i tipi di dati Java primitivi da un flusso di input sottostante in modo indipendente dalla macchina. Un'applicazione utilizza un flusso di output di dati per scrivere dati che possono essere successivamente letti da un flusso di input di dati .

DataInputStream non è necessariamente sicuro per l'accesso multithread.

FileInputStream offre solo un'interfaccia molto semplice. Quando vuoi leggere numeri, stringhe (o anche oggetti complessi) piuttosto che solo byte, è un dolore. Quindi si usa un secondo flusso di input "avvolgendo" il primo, che offre un'interfaccia più utile. DataInputStream è uno di questi.

1

No, non c'è bisogno di DataInputStream nell'esempio perché si ottiene finalmente un BufferedReader per leggere i dati.

Cosa invece senso è:

FileInputStream fstream = new FileInputStream ("file1.txt"); 
BufferedInputStream br = new BufferedInputStream(fstream); 
DataInputStream dis = new DataInputStream(br); 

Di solito questo sarebbe andare di pari passo quando si è creato "file1.txt" utilizzando:

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("file1.txt"))); 

Edit:

Perché è permesso da Java se non ha davvero senso? Perché questo è Decorator pattern e questo è uno degli svantaggi del modello Decorator.

4

L'uso di DataInputStream è un errore comune che credo provenga da copia e incolla da diversi pezzi di codice.Vuoi leggere i file come entrambi i testi, ad es. BufferedReader OR binario, ad es. DataInputStream. È altamente improbabile che tu voglia utilizzarli entrambi e provare a generare confusione.

per il testo che viene tamponato

BufferedReader br = new BufferedReader(new FileReader(file)); 

Per binario che viene tamponato

DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));