¿Cuándo ocurrirá una excepción EOFException en las secuencias de JAVA?

3 minutos de lectura

avatar de usuario
jbu

Estoy trabajando con DataInputStream y tenía una pregunta sobre EOFExceptions.

De acuerdo con los documentos de Java:

Señala que se ha alcanzado inesperadamente un final de archivo o final de secuencia durante la entrada.

Esta excepción es utilizada principalmente por flujos de entrada de datos para señalar el final del flujo. Tenga en cuenta que muchas otras operaciones de entrada devuelven un valor especial al final de la transmisión en lugar de generar una excepción.

¿Significa esto que cuando se genera una excepción EOFException, la transmisión NUNCA se volverá a abrir? ¿Significa que NUNCA deberías esperar más datos de él?

Si un flujo de salida está conectado a un flujo de entrada y se llama a outputstream.close(), ¿recibirá un flujo de entrada la EOFException o una IOException?

Una IOException se describe como:

Señala que se ha producido una excepción de E/S de algún tipo. Esta clase es la clase general de excepciones producidas por operaciones de E/S fallidas o interrumpidas.

¿Un cierre en el flujo de salida produce una EOFException o una IOException en el lado del flujo de entrada de datos?

  • Para referencia de otros: esta respuesta explica por qué EOFException se lanza en lugar de que los métodos devuelvan un valor especial.

    – 2rs2ts

    30 de enero de 2014 a las 13:53

La palabra clave es inesperado.

Si usa DataInputStream y lee un número entero de 4 bytes pero solo quedan 3 bytes en la transmisión, obtendrá una excepción EOFException.

Pero si llama a read () al final de la transmisión, solo obtendrá -1 de vuelta y sin excepción.

  • La respuesta solo aumenta la confusión. read() devuelve -1, readLine() devuelve nulo, readXXX() para cualquier otra X lanza EOFException.

    – usuario207421

    4 de enero de 2014 a las 0:34

  • Y no hay ‘palabra clave’ aquí.

    – usuario207421

    13 de diciembre de 2018 a las 8:12

avatar de usuario
usuario207421

Cuando llega al final de una secuencia (fin de archivo o par cierra la conexión):

  • read() devuelve -1
  • readLine() devuelve nulo
  • readXXX() para cualquier otro lanzamiento de X EOFException.

La transmisión aún está abierta, pero debe dejar de leerla y cerrarla.

Respondiendo a otra parte de su pregunta: Sí, EOF significa que no se verán más datos en la transmisión; deberías cerrarlo.

EOFException es una subclase de IOException. Se lanzará si intenta leer de la secuencia y no hay más datos para leer (por ejemplo, porque su DataInputStream está envuelto alrededor de un FileInputStream y está tratando de leer más bytes de los que quedan en el archivo).

avatar de usuario
Saili Waichal

Se lanza la excepción EOFException:

  1. si no hay datos en un ARROYO pero está tratando de leer… por ejemplo, lea métodos de flujos en cadena como DataInputStream, ObjectInputStream, RandomAccessFile, arroje EOFException si están tratando de leer desde FileInputStream pero FileInputStream está vacío
  2. o si los formatos no coinciden… por ejemplo, si int está presente y está utilizando readFloat() de DataInputStream

  • El punto 2 no es correcto. Está claro que no lo has probado. Lo que describes es imposible. No hay información de formato en un DataInputStream para que la transmisión la pruebe. También sería irracional lanzar EOFException cuando la secuencia no está vacía.

    – usuario207421

    4 de enero de 2014 a las 0:31

  • El punto 2 no es correcto. Está claro que no lo has probado. Lo que describes es imposible. No hay información de formato en un DataInputStream para que la transmisión la pruebe. También sería irracional lanzar EOFException cuando la secuencia no está vacía.

    – usuario207421

    4 de enero de 2014 a las 0:31

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad