read leer java file inputstream java-io fileinputstream

read - leer fileinputstream java



¿Cuál es la diferencia al usar InputStream en lugar de FileInputStream al crear el objeto FileInputStream? (5)

Al igual que el otro estado de respuesta, no hay diferencia en el comportamiento. Sigue siendo el mismo objeto y se ejecutarán los mismos métodos. Puede asignar un objeto de cualquier tipo que herede InputStream a esa variable.

Sin embargo, lo que nadie mencionó hasta ahora es: solo puede llamar a operaciones que están declaradas en InputStream en esa variable. Si FileInputStream ofrecería algunas operaciones adicionales, el compilador arrojaría un error si intentas llamarlo. En este caso, necesitaría usar FileInputStream como tipo de variable.

Esto puede ser una tontería, pero quiero saber la diferencia de operación de fondo.

  1. InputStream is = new FileInputStream(filepath);
  2. FileInputStream is = new FileInputStream(filepath);

¿Cuál es la diferencia entre las dos líneas de código anteriores y en qué escenarios se utilizan?


Las otras respuestas lo han clavado bastante, pero me gustaría agregar el siguiente bit.

Si el tipo de la variable de referencia es estrictamente un detalle de implementación interna de su clase, es decir, ninguna otra clase lo descubrirá, directa o indirectamente, entonces realmente no hay diferencia entre las dos afirmaciones, aunque programaría en contra el tipo más básico (InputStream) solo porque.

Sin embargo, si existe incluso el más mínimo indicio de que se está filtrando el comportamiento específico de FileInputStream a través de la interfaz de su clase, sin que esto sea esencial para el problema que está tratando de resolver, siempre debe programar contra el tipo más básico.

Por supuesto, esta es una buena práctica general y se aplica a más de InputStreams y similares.


No hay diferencia real. FileInputStream amplía InputStream , por lo que puede asignar un objeto InputStream para que sea un objeto FileInputStream . Al final, es el mismo objeto, por lo que sucederán las mismas operaciones.

Este comportamiento se llama Polymorphism y es muy importante en la programación orientada a objetos.

Su primera línea de código es probablemente más deseable que la segunda, ya que no lo bloquea en un FileInputStream .

Este es uno de los puntos fuertes de la programación orientada a objetos. No especificar un tipo le permite cambiar el tipo de flujo que está utilizando más adelante. Si está seguro de que solo necesitará un FileInputStream aquí, use la segunda línea de código.


No hay diferencia. En cada caso estás creando un FileInputStream . El primero es, probablemente, un mejor estilo de programación, ya que generalmente debería usar una interface clases interface lugar de la clase concreta para permitir la flexibilidad (es decir, decide usar un BufferedInputStream ).


FileInputStream amplía InputStream : es una versión especializada de un InputStream diseñado para leer archivos.

Hay varias implementaciones de un InputStream de acuerdo con su uso.

Por lo general, es una buena práctica usar el tipo más alto que se necesita en su código. Por lo tanto, si su código necesita leer datos de InputStream pero no específicamente de FileInputStream , debe usar InputStream . Sin embargo, si necesita mantener la información de su objeto como FileInputStream y no solo como InputStream , debe mantener el tipo FileInputStream .