92

私の現在の状況は次のとおりです。ファイルを読み取って、その内容を に入れる必要がありますInputStream。その後、の内容をInputStream(私の知る限り) のサイズを必要とするバイト配列に配置する必要があり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オブジェクトでありFileItemFactoryServletFileUploadApache Commons FileUpload パッケージからのものです。

4

12 に答える 12

4

Utils.java の getBytes(inputStream) を使用して、InputStream のサイズを取得できます。この次のリンクを確認してください。

入力ストリームからバイトを取得

于 2013-03-21T12:11:56.473 に答える
2

以下の関数は、任意のInputStream. 他の回答が示唆しているように、を読まないと長さを確実に見つけることはできませんInputStreamが、他の回答とは異なり、を読み取ってストリーム全体をメモリに保持しようとしないByteArrayOutputStreamでください。また、理由もありません。ストリームを読み取る代わりに、理想的には、API を使用してファイルのサイズを取得するなど、ストリーム サイズについて他の API に依存する必要がありFileます。

public static int length(InputStream inputStream, int chunkSize) throws IOException {
    byte[] buffer = new byte[chunkSize];
    int chunkBytesRead = 0;
    int length = 0;
    while((chunkBytesRead = inputStream.read(buffer)) != -1) {
        length += chunkBytesRead;
    }
    return length;
}

chunkSizeの種類に適した適切な値を選択しますInputStream。たとえば、ディスクからの読み取りは、 の値が小さすぎると効率的ではありませんchunkSize

于 2021-03-02T04:47:12.760 に答える
-1

このメソッドを使用します。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: ";
}
于 2015-11-10T23:17:04.203 に答える