2012-07-17 24 views
6

¿Cuál es la diferencia entrenecesidad de datos de flujo de entrada

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

y

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

¿Realmente necesitamos un DataInputStream aquí?

+1

Por favor, no use DataInputStream si desea leer el texto, es más confuso que útil. –

Respuesta

2

Lo significativo del objeto pasado al constructor InputStreamReader() es que será el objeto que soportará el peso de cualquier retención de sincronización. Si no desea que su llamada al FileInputStream sea potencialmente retenida por muchas llamadas, entonces la segunda opción es el camino a seguir. Ver the source of Reader.

1

Depende, Un flujo de entrada de datos permite que una aplicación lea tipos de datos primitivos de Java desde un flujo de entrada subyacente de una manera independiente de la máquina. Una aplicación utiliza una secuencia de salida de datos para escribir datos que luego pueden leerse mediante una secuencia de entrada de datos. Check JavaDoc

BufferedReader: Lee el texto de una secuencia de entrada de caracteres, almacenando en el búfer caracteres para proporcionar la lectura eficiente de caracteres, matrices y líneas.

FileInputStream: con FileInputStream, leerá los datos del archivo en bytes.

2

FileInputStream está diseñado para leer flujos de bytes sin formato, como datos de imágenes . Para leer secuencias de caracteres, considere usar FileReader.

Un flujo de entrada de datos permite que una aplicación lea tipos de datos Java primarios de un flujo de entrada subyacente de una manera independiente de la máquina. Una aplicación utiliza una secuencia de salida de datos para escribir datos que luego pueden ser leídos por una secuencia de entrada de datos.

DataInputStream no es necesariamente seguro para el acceso multiproceso.

FileInputStream solo le ofrece una interfaz muy básica. Cuando quieras leer números, cadenas (o incluso objetos complejos) en lugar de solo bytes, eso es un problema. Entonces, utiliza una segunda corriente de entrada que "envuelve" la primera, lo que le proporciona una interfaz más útil. DataInputStream es uno de estos.

1

No, no hay necesidad de DataInputStream en su ejemplo porque finalmente está obteniendo un BufferedReader para leer datos.

¿Qué lugar tiene sentido es:

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

lo general, esto sería ir de la mano cuando se haya creado "file1.txt" usando:

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

Editar:

Por qué ¿Está permitido por Java si realmente no tiene sentido? Porque esto es Decorator pattern y esta es una de las desventajas del patrón Decorator.

4

El uso de DataInputStream es un error común que creo que proviene de copiar y pegar desde diferentes partes del código.Desea leer los archivos como texto, p. Ej. BufferedReader OR binario, p. DataInputStream. Es altamente improbable que quiera usar ambos y tratar de confundir.

para el texto que está amortiguada

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

Por binario que está tamponada

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