确定输入流的大小

2022-08-31 10:33:36

我目前的情况是:我必须读取一个文件并将内容放入.之后,我需要将 的内容放入一个字节数组中,该数组需要(据我所知)的大小。有什么想法吗?InputStreamInputStreamInputStream

根据要求,我将显示我正在从上传的文件创建的输入流

InputStream uploadedStream = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
java.util.List items = upload.parseRequest(request);      
java.util.Iterator iter = items.iterator();

while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();
    if (!item.isFormField()) {
        uploadedStream = item.getInputStream();
        //CHANGE uploadedStreambyte = item.get()
    }
}

该请求是一个对象,它类似于 Apache Commons FileUpload 包。HttpServletRequestFileItemFactoryServletFileUpload


答案 1

这是一个非常古老的线程,但是当我用谷歌搜索这个问题时,它仍然是弹出的第一件事。所以我只想添加这个:

InputStream inputStream = conn.getInputStream();
int length = inputStream.available();

为我工作。而且比这里的其他答案简单得多。

警告此解决方案不能提供有关流总大小的可靠结果。除了 JavaDoc:

请注意,虽然 {@code InputStream} 的某些实现将返回流中的字节总数,但许多实现不会。


答案 2

我会读入一个ByteArrayOutputStream,然后调用byteArray()来获取结果字节数组。您无需提前定义大小(尽管如果您知道,这可能是一种优化。在许多情况下,您不会)