从InputStream读取时发生IOException

在 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字节),则工作正常。特定

大小的文件有问题吗?

任何帮助表示赞赏!

谢谢!

回答:

(我发给android-developers的帖子没有显示,因此我将尝试

在此处重新发布)

IIRC,此问题来自尝试访问在构建APK过程中被压缩的文件。

因此,要变通解决此问题,请给它一个不会被

压缩的文件扩展名。我忘记了跳过哪些扩展名的列表,但是

已知已经压缩的文件类型(例如mp3,jpg)可能会起作用。

以上是 从InputStream读取时发生IOException 的全部内容, 来源链接: utcz.com/qa/410497.html

回到顶部