android - AssetInputStream.read() 总是返回 -1

标签 android inputstream android-contentresolver android-assets

我正在编写一个应用程序,需要出于各种目的读取两个图像文件。

其中一个图片文件是通过intent-filter接收的,我是这样打开的(注意:mIntentgetIntent()的结果):

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/

相关文章:

安卓谷歌加 SDK : how to get callback on the +1 button (PlusOneButton)

java - 输入流与输出流有何不同?

java - 尝试读取 inputStream 时连接重置

android - 如何从 Android 中的 .mov 文件中获取缩略图?

android - 如何删除android中的sim卡联系人

android - AlertDialog 中的自定义 Listview 隐藏对话框的消息?

android - 我的 Visual Studio Android 模拟器在哪里?

Android:具有 2 个 dnsmasq 的热点同时运行

java - 如何设置InputStream.read的读取超时时间?

android - Intent.ACTION_GET_CONTENT 打开最近的文件,这给出了错误的 URI