如何将inputstream的内容复制或存储到字节数组中?

时间:2012-06-28 00:18:39

标签: java servlets file-upload

我正在使用Apache Commons FileUpload库来上传文件。我想将InputStream的内容复制到单个字节数组中。我怎么能这样做?

try {
    List<FileItem> items = new ServletFileUpload(
            new DiskFileItemFactory()).parseRequest(request);
    for (FileItem item : items) {
        if (item.isFormField()) {
            // Process regular form field (input
            // type="text|radio|checkbox|etc", select, etc).
            String fieldname = item.getFieldName();
            String fieldvalue = item.getString();
            out.println("returned");
        } else {
            // Process form file field (input type="file").
            String fieldname = item.getFieldName();
            String filename = FilenameUtils.getName(item.getName());
            InputStream input = item.getInputStream();
            if (fieldname.equals("file")) {
                // please help me here.
                byte[] allbyte = ???
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

使用IOUtils.toByteArray()库中的Apache commons-io实用程序方法:

import org.apache.commons.io.IOUtils;

InputStream input;
byte[] bytes = IOUtils.toByteArray(input);

它给你一个单行。一般来说,尝试找到一个符合你想要的现有库,Apache commons libraries有大量方便的方法。

答案 1 :(得分:0)

如何使用ByteArrayOutputStream

ByteArrayOutputStream out = new ByteArrayOutputStream();

int b = input.read();
while (b != -1) {
    out.write(b);
    b = input.read();
}
allbyte = out.toByteArray();

答案 2 :(得分:-1)

使用DataInputStream。它有一个readFully()方法,可以读取所有字节。

DataInputStream dis = new DataInputStream(inputStream);
byte[] allBytes = new byte[inputStream.available()];
dis.readFully(allBytes);

详情请见

InputStream

DataInputStream