【发布时间】:2010-11-19 09:17:18
【问题描述】:
我在从 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 字节),它可以正常工作。超过一定大小的文件有问题吗?
感谢您的帮助!
谢谢!
【问题讨论】:
-
1mb 文件有效,但 1.5mb 文件无效。资产有大小限制吗??
标签: java android inputstream ioexception