2016-04-13 2 views
1

Alle, scheiterteAndroid Java IOException lesen EBADF (Bad File Number) Aus Datei-Descriptor/Input Stream

ich die folgende Fehlermeldung erhalten, wenn eine Bitmap aus einem Dateideskriptor zu erstellen versuchen, auf Android läuft (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) 

Es kennzeichnet den Dekodierungsprozess, wo es beginnt. Mein Code ist wie

 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); 
     } 

Hinweis folgt: Ich habe nativen Anrufe, die mir den Dateideskriptor als int geben, weshalb ich dort die Übersetzung zu tun haben (und ich habe eine gültige Nummer bekommen) ... Wie auch immer Ich überprüfe alle verwendeten Variablen und sie sind nicht Null bis zu dem Punkt 'decodeFileDescriptor (...)'. Ich auch gemacht, dass ich die folgenden Berechtigungen in Android hatte:

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

Auch ich habe sogar versucht, einen Synchronisierungsblock um die oben, um sicherzustellen aufgeführten Code setzen es war kein Threading-Problem (sollte nicht sein, aber nur für den Fall gemacht). Irgendwelche Gedanken? Ich hoffe, ich habe genug Informationen gegeben. Vielen Dank.

Antwort

0

Also habe ich das Problem herausgefunden. Mir fehlte ein Präfix für den Dateideskriptor. Es tut mir leid, wenn das niemandem hilft. Wenn jemand zufällig darauf stößt und eine Lösung für eine ähnliche Situation hat, dann posten Sie bitte. Vielen Dank.