确定InputStream的大小

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

根据要求,我将显示从上传的文件创build的inputstream

 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() } } 

请求是一个HttpServletRequest对象,就像FileItemFactoryServletFileUpload来自Apache Commons FileUpload包。

我只是想补充一点,Apache Commons IO有stream支持实用程序来执行复制。 (顺便说一句,把这个文件放到inputstream中是什么意思?你能告诉我们你的代码吗?)

编辑:

好的,你想要做什么与该项目的内容? 有一个item.get() 将整个事物返回到一个字节数组中。

EDIT2

item.getSize()将返回上传的文件大小 。

这是一个真正的老话题,但是当我search这个问题的时候,它仍然是第一个popup的。 所以我只是想补充一点:

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

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

我会读入一个ByteArrayOutputStream ,然后调用toByteArray()来获得结果字节数组。 你不需要事先定义大小(虽然如果你知道它可能是一个优化在很多情况下你不会)

无法读取stream中的数据量; 你可以,但是,要求文件的大小:

http://java.sun.com/javase/6/docs/api/java/io/File.html#length();

如果这是不可能的,你可以把你从inputstream中读取的字节写入一个ByteArrayOutputStream ,它将根据需要增长。

您可以使用Utils.java的getBytes(inputStream)来获取InputStream的大小,请检查以下链接

从inputstream获取字节

当明确地处理ByteArrayInputStream ,与本页面的一些注释相反,您可以使用.available()函数来获取大小。 在开始阅读之前,只需要做。

从JavaDocs:

返回可从此inputstream中读取(或跳过)的剩余字节数。 返回的值是count-pos,这是从input缓冲区中剩余的字节数。

https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html#available();

使用这种方法,你只需要传递InputStream

 public String readIt(InputStream is) { if (is != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line).append("\n"); } is.close(); return sb.toString(); } return "error: "; }