从Android 平台上的InputStream读取时,我遇到了一个奇怪的问题。我不确定这是否是特定于 Android 的问题,或者我做错了什么。
唯一特定于 Android 的是这个调用:
InputStream is = getResources().openRawResource(R.raw.myfile);
这将返回来自 Android 资产的文件的InputStream。无论如何,这就是我遇到问题的地方:
bytes[] buffer = new bytes[2];
is.read(buffer);
当 read() 执行时,它会抛出一个IOException。奇怪的是,如果我进行两次连续的单字节读取(或任意数量的单字节读取),也不例外。例如,这有效:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
知道为什么两个连续的单字节读取有效,但一次调用一次读取两者会引发异常吗?InputStream似乎很好......返回超过一is.available()
百万字节(应该如此)。
堆栈跟踪在以下行之前显示了这些行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)
将缓冲区大小更改为单个字节仍然会引发错误。看起来只有在读入字节数组时才会引发异常。
如果我将文件截断为 100,000 字节(文件最初为:1,917,408 字节),它工作正常。超过一定大小的文件有问题吗?
任何帮助表示赞赏!
谢谢!