Me encuentro con un problema extraño al leer InputStream en la plataforma Android. No estoy seguro si este es un problema específico de Android, o algo que estoy haciendo mal en general.IOException durante la lectura de InputStream
La única cosa que es específica Android es esta llamada:
InputStream is = getResources().openRawResource(R.raw.myfile);
Esto devuelve un InputStream para un archivo de los activos Android. De todas formas, aquí es donde me encuentro con el problema:
bytes[] buffer = new bytes[2];
is.read(buffer);
Cuando la lectura() realiza lanza una IOException . Lo extraño es que si hago dos lecturas secuenciales de un solo byte (o cualquier número de lecturas de bytes individuales), no hay excepción. En el ejemplo, esto funciona:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Cualquier idea de por qué dos de un solo byte lecturas secuenciales de trabajo pero una llamada para leer dos a la vez produce una excepción? El InputStream parece estar bien ... is.available()
devuelve más de un millón de bytes (como debería).
Seguimiento de la pila muestra estas líneas justo antes de la InputStream.read()
:
java.io.IOException
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$800(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542)
Cambiar el tamaño del búfer a un solo byte todavía arroja el error. Parece que la excepción solo se plantea al leer en una matriz de bytes.
Si trunco el archivo a 100.000 bytes (el archivo es: 1.917.408 bytes originalmente) funciona bien. ¿Hay algún problema con archivos de un cierto tamaño?
¡Se agradece cualquier ayuda!
Gracias!
Un archivo de 1 MB trabajado, pero un archivo de 1,5 MB no lo hicieron. ¿Hay alguna restricción de tamaño para los activos? – DJayC