java - Android Java IOException 从文件描述符/输入流读取失败 EBADF(错误文件号)

标签 java android bitmap decode file-descriptor

全部,

尝试从 Android (v18) 上运行的文件描述符创建位图时出现以下错误:

java.io.IOException: read failed: EBADF (Bad file number)
at libcore.io.IoBridge.read(IoBridge.java:435)
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:530)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:603)

它在解码过程开始的地方进行标记。我的代码如下

        MyNativeCallClassClient client = new MyNativeCallClassClient();
        final int fileDescriptor = client.NativeMethodCallGetFD(getShared_memory_name(), getShared_memory_size());
        try {
           Log.d(TAG, "file descriptor number: " + fileDescriptor);
           ParcelFileDescriptor fd = ParcelFileDescriptor.fromFd(fileDescriptor);
           FileDescriptor realFD = fd.getFileDescriptor();
           Bitmap aBitMap= BitmapFactory.decodeFileDescriptor(realFD);
           Log.d(TAG, "BitMap Generated: byte count: " + aBitMap.getByteCount() + ", height: " + aBitMap.getHeight() + ", width: " + aBitMap.getWidth());

        }
        catch (IOException ex) {
           Log.e(TAG, "Issue with decoding file descriptor", ex);
        }

注意:我有本地调用,它给我一个 int 形式的文件描述符,这就是为什么我必须在那里进行翻译(并且我确实得到了一个有效的数字)...无论如何,我检查了使用的所有变量,并且它们在“decodeFileDescriptor(...)”之前不为空。我还确保我在 Android 中拥有以下权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

此外,我什至尝试在上面列出的代码周围放置一个同步块(synchronized block),以确保不存在线程问题(不应该,但以防万一)。有什么想法吗?我希望我提供了足够的信息。谢谢。

最佳答案

所以,我解决了这个问题。我缺少文件描述符上的前缀。如果这不能帮助任何人,我很抱歉。如果有人碰巧遇到过这种情况并且对上述类似情况有解决方案,请发帖。谢谢。

关于java - Android Java IOException 从文件描述符/输入流读取失败 EBADF(错误文件号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36608842/

相关文章:

java 转换整数以通过网络发送

java - MySQL 多重查询

java - Android JSON 负载构建

android - ListView SetAdapter NullPointerException异常

android - 引用我的自定义 BitmapDrawable 来自 android :src in a resource XML

java - 有谁知道如何摆脱这个 Eclipse 错误窗口?

java - 使用struts2将值保存到mysql

java - 如何将修改后的 GPL 软件的源代码与闭源软件正确 bundle 并发布

c# - PIxelFormat之间如何相互转换?

android - 在android中使用位图的问题