确定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
对象,就像FileItemFactory
和ServletFileUpload
来自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: "; }