java – 检查InputStream大小的问题

Issue with checking InputStream size

本问题已经有最佳答案,请猛点这里访问。

我有一个奇怪的问题:

我的Dropwizard API处理上载的文件并将其保存为jpeg图像

上传的文件作为InputStream读取。

使用@FormDataParam("file")读取FormDataBodyPart fileBody

1
2
3
4
5
InputStream imageStream = fileBody.getValueAs(InputStream.class);
final int maxSize = 102400;
final byte[] bytes = new byte[maxSize + 1];
int totalBytes = this.imageStream.read(bytes);
System.out.println("totalBytes:"+totalBytes);

返回的totalBytes值决不大于8181,无论上传文件的原始大小如何。我试过用800KB1.3MB文件

HttpServletRequest.getContentLength()显示上传的正确字节数。

我这里缺什么?


inputstream.read(byte[])

不保证阅读完整的内容。来自JavaDoc:

从输入流中读取一些字节数并将其存储到缓冲区数组B中。实际读取的字节数作为整数返回。此方法将一直阻塞,直到输入数据可用、检测到文件结尾或引发异常为止。

第一次调用似乎只有8181字节可用。您需要继续读取,直到方法返回-1并合并所有读取的字节。