Android 解码使用Okio和ContentResolver.openInputStream()复制的图像文件时出现问题

Android 解码使用Okio和ContentResolver.openInputStream()复制的图像文件时出现问题,android,android-bitmap,bitmapfactory,okio,Android,Android Bitmap,Bitmapfactory,Okio,我有以下设置:使用Intent.ACTION\u GET\u CONTENTIntent选择库图像,然后在onActivityResult()中,我获得一个带有Uri的意图。接下来,我尝试执行以下操作: Source source = Okio.source(getContentResolver().openInputStream(intent.getData())); BufferedSink sink = Okio.buffer(Okio.sink(new File(outPath)));

我有以下设置:使用
Intent.ACTION\u GET\u CONTENT
Intent选择库图像,然后在
onActivityResult()
中,我获得一个带有Uri的意图。接下来,我尝试执行以下操作:

Source source = Okio.source(getContentResolver().openInputStream(intent.getData()));
BufferedSink sink = Okio.buffer(Okio.sink(new File(outPath)));
long bytesWritten = sink.writeAll(source);
此处
outPath
是指向预先创建的现有0长度文件的有效路径

复制操作在没有错误的情况下完成,
BytesWrite
返回与源文件大小相同的实际字节

但当我事后这样做时:

BitmapFactory.decodeFile(outFile);
它返回
null
并生成
skia:decoder返回false
日志消息。这通常意味着文件的格式是错误的

为什么呢?我也试着做同样的事情,没有使用
Okio
(只是写了很多丑陋的代码,将InputStream复制到OutputStream),结果是一样的。有什么提示吗

注意,下面的方法是可行的,但它的缺点是我必须额外解码位图。而我宁愿将InputStream复制到一个文件中

Bitmap b = BitmapFactory.decodeStream(getContentResolver().openInputStream(intent.getData()));
outStream = new FileOutputStream(outFile);
b.compress(Bitmap.CompressFormat.JPEG, 92, outStream);

outFile
的内容是什么?@pskink-hmm,刚刚检查过,看起来确实很奇怪,请注意底部未完成的条带。。。所以我猜是因为某种原因,它没有冲水()还是什么?是的,很可能是flush()/close()问题哦,事实上我好像没有调用close!请您将此作为答案提交,我将接受。而
outFile
的内容是什么?@pskink-hmm,刚刚检查过,看起来确实很奇怪,请注意底部未完成的条带。。。所以我猜是因为某种原因,它没有冲水()还是什么?是的,很可能是flush()/close()问题哦,事实上我好像没有调用close!请你将此作为答复提交,我将接受。