java – 从InputStream读取IOException

前端之家收集整理的这篇文章主要介绍了java – 从InputStream读取IOException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Android平台上的InputStream读取时,我遇到了一个奇怪的问题.我不知道这是否是一个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开发者没有出现,所以我会尝试在这里重新发布)

IIRC,这个问题来自尝试访问在构建APK时被压缩的文件.

因此,要解决这个问题,请给它一个不会压缩的文件扩展名.我忘记了什么扩展被跳过的列表,但已经被压缩的文件类型(例如mp3,jpg)可能会工作.

原文链接:https://www.f2er.com/java/122618.html

猜你在找的Java相关文章