Android プラットフォームでInputStreamから読み取り中に奇妙な問題が発生しました。これが Android 固有の問題なのか、それとも一般的に間違っているのかはわかりません。
Android 固有の唯一のものは、次の呼び出しです。
InputStream is = getResources().openRawResource(R.raw.myfile);
これは、Android アセットからのファイルのInputStreamを返します。とにかく、ここで私は問題に遭遇します:
bytes[] buffer = new bytes[2];
is.read(buffer);
read() が実行されると、IOExceptionがスローされます。奇妙なことに、2 つの連続した 1 バイト読み取り (または任意の数の 1 バイト読み取り) を実行しても、例外はありません。例では、これは機能します:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
2 つの連続する 1 バイト読み取りが機能するのに、一度に両方を読み取るための 1 つの呼び出しが例外をスローする理由は何ですか? InputStreamは問題ないようです... is.available()
100 万バイト以上を返します (当然のことです) 。
スタック トレースは、次の行の直前に次の行を示します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)
バッファ サイズを 1 バイトに変更しても、エラーがスローされます。バイト配列への読み取り時にのみ例外が発生するようです。
ファイルを 100,000 バイト (元のファイルは 1,917,408 バイト) に切り詰めると、正常に動作します。特定のサイズを超えるファイルに問題はありますか?
どんな助けでも大歓迎です!
ありがとう!