gpt4 book ai didi

android - 读取 AssetFileDescriptor 时出现 IOException

转载 作者:太空狗 更新时间:2023-10-29 16:21:42 27 4
gpt4 key购买 nike

我正在尝试使用以下代码从 Android /assets 文件夹中读取位图:

AssetFileDescriptor fd = getAssets().openFd("pic1.jpg")
Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd.getFileDescriptor());

我得到的异常提示文件权限错误:

java.io.IOException: read failed: EBADF (Bad file number)
at libcore.io.IoBridge.read(IoBridge.java:432)
at java.io.FileInputStream.read(FileInputStream.java:179)
at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:168)
at java.io.BufferedInputStream.read(BufferedInputStream.java:309)
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at android.graphics.BitmapFactory.decodeFileDescriptor(BitmapFactory.java:670)
at android.graphics.BitmapFactory.decodeFileDescriptor(BitmapFactory.java:688)

尝试从输入流中读取它会产生类似的异常:

AssetFileDescriptor fd = getAssets().openFd("pic1.jpg");
FileInputStream is = fd.createInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);

异常:

java.io.IOException: lseek failed: EBADF (Bad file number)
Stack trace:
at java.io.FileInputStream.skip(FileInputStream.java:197)
at android.content.res.AssetFileDescriptor$AutoCloseInputStream.<init>(AssetFileDescriptor.java:173)
at android.content.res.AssetFileDescriptor.createInputStream(AssetFileDescriptor.java:138)

直接从输入流中读取会出现另一个异常:

InputStream is = getAssets().open("pic1.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(is);

异常:

java.lang.NullPointerException: asset
at android.content.res.AssetManager.seekAsset(Native Method)
at android.content.res.AssetManager.access$600(AssetManager.java:35)
at android.content.res.AssetManager$AssetInputStream.mark(AssetManager.java:567)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:572)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:643)

什么是正确的读取 Assets 的方法?

最佳答案

问题是我没有从主线程读取 Assets 。在我开发的应用程序中,两个列表项可以同时加载相同的、相当大的 Assets 。

简而言之,如果在另一个线程试图访问该文件时该文件仍在读取,则会抛出 IOException 并显示“lseek 失败:EBADF(错误文件编号)”。

关于android - 读取 AssetFileDescriptor 时出现 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com