繁体   English   中英

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

[英]Android Java IOException read failed EBADF (Bad File Number) From File descriptor/Input Stream

所有,

尝试从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"/>

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

所以,我想出了这个问题。 我在文件描述符上缺少一个前缀。 如果这对任何人都没有帮助,我很抱歉。 如果有人碰巧碰到了这个并且解决了上述类似情况,请发帖。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM