从Android平台上的InputStream中读取时,我遇到了一个奇怪的问题。我不确定这是一个Android特定的问题,还是我一般做错的事情。从InputStream中读取时出现IOException
是Android的特定的唯一事情是这样调用:
InputStream is = getResources().openRawResource(R.raw.myfile);
这将返回的InputStream从Android的资产的文件。不管怎么说,这里就是我碰到的问题:
bytes[] buffer = new bytes[2];
is.read(buffer);
当读()执行它抛出IOException异常。奇怪的是,如果我做两个连续的单字节读取(或任何数量的单字节读取),没有例外。在例子中,这个工程:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
任何想法,为什么两个连续的单字节读取工作,但一个调用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字节)它工作正常。有超过一定大小的文件有问题吗?
任何帮助表示赞赏!
谢谢!
1MB的文件工作,但一个1.5MB的文件都没有。资产是否有一定的规模限制? – DJayC