簡體   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