gpt4 book ai didi

java - IOUtils.read() 之后 InputStream 会发生什么

转载 作者:行者123 更新时间:2023-12-02 03:24:18 24 4
gpt4 key购买 nike

我正在编写代码来验证最大文件大小。

public static void main(String[] args) throws IOException {

final InputStream inputStream = new FileInputStream(new File("/path/to/image.jpg"));

System.out.println("initial: " + inputStream.read());

int arr = IOUtils.read(inputStream, new byte[2000001]);
if (arr == 2000001) {
System.out.println("file size greater than limit");
}
System.out.println("after: " + inputStream.read());
}

输出

initial: 255
file size greater than limit
after: 21

问题是当 InputStream 传递给 IOUtils.read() 时会发生什么?接下来,我必须将 InputStream 保存为图像,当我将相同的 InputStream 引用传递给 s3 存储桶的 save 方法 上传方法时,损坏的图像将被保存。有人可以告诉我发生了什么事吗?

最佳答案

一旦您从输入流中读取了某些内容,它就会“消失”。读取位置沿着输入向上移动。因此,当您忙于尝试计算文件中的字节数时,您同时会丢失数据,因为数据没有被存储。因此,一旦您传递 InputStream 引用来保存文件,您的阅读器就不再位于流/文件的开头,从而导致文件损坏。

您可以通过不同的方式获取文件的大小。

java.io.File file = new java.io.File("example.file");
file.length();

如果文件不太大,您可以继续保存文件。要检查文件大小,还请检查 link由@tkausl 提供

关于java - IOUtils.read() 之后 InputStream 会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188297/

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