Si verifica uno strano problema durante la lettura da un InputStream sulla piattaforma Android. Non sono sicuro che si tratti di un problema specifico di Android o di qualcosa che sto sbagliando in generale.IOException durante la lettura da InputStream
L'unica cosa che è specifica Android è questa chiamata:
InputStream is = getResources().openRawResource(R.raw.myfile);
Ciò restituisce un InputStream per un file dalle attività Android. In ogni modo, ecco dove mi imbatto in questione:
bytes[] buffer = new bytes[2];
is.read(buffer);
Quando il read() esegue viene generata IOException. La cosa strana è che se faccio due letture sequenziali a byte singolo (o un numero qualsiasi di letture di un singolo byte), non c'è eccezione. Nell'esempio, questo funziona:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Qualsiasi idea del perché due sequenziali singolo byte legge lavoro, ma una chiamata di leggere entrambi contemporaneamente genera un'eccezione? InputStream sembra corretto ... is.available()
restituisce oltre un milione di byte (come dovrebbe).
traccia Pila mostra queste righe poco prima della 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)
Cambiare la dimensione del buffer per un singolo byte getta ancora l'errore. Sembra che l'eccezione venga sollevata solo durante la lettura in un array di byte.
Se il file viene troncato a 100.000 byte (il file è: 1.917.408 byte in origine) funziona correttamente. C'è un problema con i file di una certa dimensione?
Qualsiasi aiuto è apprezzato!
Grazie!
Un file 1MB lavorato, ma un file di 1,5 MB no. C'è qualche restrizione di dimensione per i beni ?? – DJayC