在IOUtils.read()

时间:2016-08-28 05:31:06

标签: java inputstream apache-commons-io

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

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方法上传方法时,损坏的图像被保存。谁能让我知道发生了什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

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