Android Java IOException 读取失败 EBADF(错误文件编号)来自文件 descriptor/Input 流
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"/>
此外,我什至尝试在上面列出的代码周围放置一个同步块,以确保没有线程问题(不应该,但以防万一)。有什么想法吗?我希望我提供了足够的信息。谢谢。
所以,我想通了这个问题。我在文件描述符上缺少前缀。如果这不能帮助任何人,我很抱歉。如果有人碰巧遇到这个问题并且对上述类似情况有解决方案,请post。谢谢。
全部,
在 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"/>
此外,我什至尝试在上面列出的代码周围放置一个同步块,以确保没有线程问题(不应该,但以防万一)。有什么想法吗?我希望我提供了足够的信息。谢谢。
所以,我想通了这个问题。我在文件描述符上缺少前缀。如果这不能帮助任何人,我很抱歉。如果有人碰巧遇到这个问题并且对上述类似情况有解决方案,请post。谢谢。