在Android平台上从InputStream读取时,我遇到了一个奇怪的问题。我不确定这是否是Android特有的问题,还是我在一般情况下做错了什么。
唯一与Android有关的是此调用:
InputStream is = getResources().openRawResource(R.raw.myfile);
这将返回一个从安卓资产中的文件所对应的InputStream。无论如何,这就是我遇到的问题所在:
bytes[] buffer = new bytes[2];
is.read(buffer);
执行read()时会抛出一个IOException异常。奇怪的是,如果我进行两次连续的单字节读取(或任何数量的单字节读取),就不会出现异常。例如,以下代码可以正常工作:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
任何想法为什么两个连续的单字节读取可以工作,但一次读取两个字节会抛出异常? 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)
将缓冲区大小更改为一个字节仍会引发错误。看起来只有在读入字节数组时才会引发异常。
如果将文件截断为100,000字节(文件原始大小为1,917,408字节),则可以正常工作。这是因为文件超过某个大小出现问题吗?
感谢任何帮助!
谢谢!