从
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)可能会工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。