gpt4 book ai didi

java - 重置 BufferedInputStream 持有 FileInputStream

转载 作者:太空狗 更新时间:2023-10-29 12:45:19 25 4
gpt4 key购买 nike

我分两步解码 jpeg。

  1. 检查边界,必要时确定比例。
  2. 在屏幕限制内解码。

public static Bitmap decodeSampledBitmapFromInputStream(InputStream data, int reqWidth, int reqHeight)
{
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(data, null, options);

// Calculate inSampleSize
options.inSampleSize = Util.getExactSampleSize(options, reqWidth, reqHeight);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;

try {
// TODO: This works, but is there a better way?
if (data instanceof FileInputStream)
((FileInputStream)data).getChannel().position(0);
else
data.reset();
} catch (IOException e) {
e.printStackTrace();
return null;
}

return BitmapFactory.decodeStream(data, null, options);
}

当底层流是 FileInputStream 时,它会在 reset() 上崩溃:

java.io.IOException: Mark has been invalidated.

所以我添加了 instanceof 部分来手动重置 FileInputStream 的位置,但这似乎是一个相当尴尬的解决方案。是否无法正确重置封装 FileInputStreamBufferedInputStream

最佳答案

在使用 InputStream.reset 之前,您必须先调用 InputStream.mark 以标记您稍后要返回的位置。

关于java - 重置 BufferedInputStream 持有 FileInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18929300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com