Dado que ByteArrayOutputStream
simplemente escribe en la memoria, nunca se debe producir un IOException
. Sin embargo, debido al contrato de la interfaz OutputStream
, todas las operaciones de flujo definen IOException
en su cláusula throws
.Java: IOException al escribir en ByteArrayOutputStream?
¿Cuál es la forma correcta de "manejar" este IOException
que nunca se produce? Simplemente ajuste las operaciones en un bloque vacío try-catch
?
¿O hay situaciones reales en las que ByteArrayOutputStream
podría arrojar una excepción?
(Véase también: How can I handle an IOException which I know can never be thrown, in a safe and readable manner?)
EDITAR
Como Jon señala, ByteArrayOutputStream
no declarar una cláusula throws
en los write
métodos que define - sin embargo, hereda write(byte[])
de OutputStream
, y ese sí lanza IOEXception
(es bastante extraño que BAOS
no invalide este método, ya que podría reemplazar la versión de la superclase - que escribe un byte a la vez - con una llamada arraycopy
mucho más eficiente)
la IOException en 'close()' debe ser un error - especialmente cuando el javadoc dice que " no tiene efecto " – irreputable
+1 ¡Gracias! Me acabo de dar cuenta de que 'ByteArrayOutputStream.write' en realidad no declara' IOException', pero Eclipse se queja de una excepción no controlada cada vez que la uso ... extraño. –
@Jen: ¿Estás seguro de que estás llamando a métodos en una variable * declarada * como 'ByteArrayOutputStream'? –