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 存储桶的 save 方法 上传方法时,损坏的图像被保存。谁能告诉我发生了什么事?
一旦您从 InputStream 中读取内容,它就是 'gone'。读取位置沿着输入向上移动。因此,当您忙于尝试计算文件中的字节数时,您同时丢失了数据,因为它没有被存储。因此,一旦您通过 InputStream 引用来保存文件,您的 reader 就不再位于 stream/file 的开头,从而导致文件损坏。
您可以通过不同的方式获取文件的大小。
java.io.File file = new java.io.File("example.file");
file.length();
如果文件不是太大,您可以继续保存文件。要检查文件大小,还请检查@tkausl
提供的 link
我正在编写代码来验证最大文件大小。
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 中读取内容,它就是 'gone'。读取位置沿着输入向上移动。因此,当您忙于尝试计算文件中的字节数时,您同时丢失了数据,因为它没有被存储。因此,一旦您通过 InputStream 引用来保存文件,您的 reader 就不再位于 stream/file 的开头,从而导致文件损坏。
您可以通过不同的方式获取文件的大小。
java.io.File file = new java.io.File("example.file");
file.length();
如果文件不是太大,您可以继续保存文件。要检查文件大小,还请检查@tkausl
提供的 link