我正在编写一个应用程序,需要出于各种目的读取两个图像文件。
其中一个图片文件是通过intent-filter接收的,我是这样打开的(注意:mIntent
是getIntent()
的结果):
mFileUri = (Uri) mIntent.getParcelableExtra(Intent.EXTRA_STREAM);
mInputStream = getContentResolver().openInputStream(mFileUri);
然后读取 mInputStream 按预期工作。
问题是读取第二个图像文件:它的 Uri
(使用 toString()
转换)写在共享首选项中,我获取值并使用 Uri.parse()
来恢复它,作为 getString()
调用中的“默认值”参数 我使用位于的本地资源的 Uri
assets 子目录(android.resource
方案)。我尝试读取它的方式是相同的,使用 getContentResolver().openInputStream()
,但出了点问题:在返回的 InputStream 上调用
始终返回 read()
-1
。我也试过 getAssets().open()
,但不管用 android.resource
还是 content
都不管用方案 Uri
。
注意:对于 Intent 接收的文件,我使用 read(byte[])
,而对于第二个文件,我使用 read()
。
那么,这是我的问题:为什么会发生这种情况,我该如何解决这个问题?
最佳答案
我是对的:这是 AssetInputStream
实现中的一个错误,因为本地方法 _FileAsset 中没有区分 EOF 和 I/O 错误::read(void *, size_t)
.
结果是只有使用 read(byte[])
或 read(byte[], int, int)< 才能从
.AssetInputStream
读取数据
关于android - AssetInputStream.read() 总是返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597072/