2

如果你写一些数据,它工作得很好。但是如果你写了很多数据(会运行很长时间),它会失败:java.io.IOException: write failed: EBADF (Bad file number)

这是代码:

writeLargeDataToStream(new FileOutputStream(getContentResolver()
        .openFileDescriptor(data.getData(), "w").getFileDescriptor()));
4

1 回答 1

1

看来您需要ParcelFileDescriptor通过将其放入这样的本地字段来防止垃圾收集:

private ParcelFileDescriptor descriptor;

并这样做:

descriptor = getContentResolver().openFileDescriptor(data.getData(), "w");
writeLargeDataToStream(new FileOutputStream(descriptor.getFileDescriptor()));

完成使用后,让垃圾收集器知道它是可收集的:

descriptor = null;
于 2014-08-28T05:33:32.590 回答