Ich bin auf ein seltsames Problem beim Lesen von einem InputStream auf der Android-Plattform. Ich bin mir nicht sicher, ob dies ein Android-spezifisches Problem ist oder etwas, das ich generell falsch mache.IOException beim Lesen von InputStream
Das einzige, was Android spezifisch ist, ist dieser Aufruf:
InputStream is = getResources().openRawResource(R.raw.myfile);
Dies gibt einen Input für eine Datei aus dem Android Assets. Wie auch immer, hier ist, wo ich in der Frage führen:
bytes[] buffer = new bytes[2];
is.read(buffer);
Wenn die read() führt er eine IOException wirft. Das Seltsame ist, dass es keine Ausnahme gibt, wenn ich zwei aufeinanderfolgende Einzelbyte-Lesevorgänge (oder eine beliebige Anzahl von Einzelbyte-Lesevorgängen) mache. Im Beispiel ist dies funktioniert:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Jede Idee, warum zwei aufeinanderfolgende einzelne Byte lesen Arbeit, sondern ein Aufruf beide auf einmal zu lesen, eine Ausnahme auslöst? Die InputStream scheint gut ... is.available()
gibt über eine Million Bytes zurück (wie es sollte).
Stapelüberwachung zeigt diese Zeilen kurz vor dem 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)
Ändern der Puffergröße auf ein Byte wirft immer noch den Fehler. Es sieht so aus, als ob die Ausnahme nur beim Lesen in ein Byte-Array ausgelöst wird.
Wenn ich die Datei auf 100.000 Bytes abschneide (Datei ist: 1.917.408 Bytes ursprünglich), funktioniert es gut. Gibt es ein Problem mit Dateien ab einer bestimmten Größe?
Jede Hilfe wird geschätzt!
Danke!
Eine 1MB Datei gearbeitet, aber eine 1,5 MB-Datei nicht. Gibt es eine Größenbeschränkung für Assets? – DJayC