繁体   English   中英

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

[英]What happens to InputStream after IOUtils.read()

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

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存储桶的上传方法,保存损坏的图像。 有人可以告诉我发生了什么吗?

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

您可以通过其他方式获取文件的大小。

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

如果文件不是太大,则可以继续保存文件。 要检查文件大小,还请检查@tkausl提供的链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM