簡體   English   中英

如何在 Java 中將 InputStream 轉換為字符串?

[英]How do I convert an InputStream to a String in Java?

假設我有一個包含文本數據的InputStream ,我想將其轉換為String (例如,我可以將流的內容寫入日志文件)。

獲取InputStream並將其轉換為String的最簡單方法是什么?

public String convertStreamToString(InputStream is) { 
    // ???
}

如果你想簡單可靠地做到這一點,我建議使用Apache Jakarta Commons IO 庫IOUtils.toString(java.io.InputStream, java.lang.String)方法。

這是我的版本

public static String readString(InputStream inputStream) throws IOException {

    ByteArrayOutputStream into = new ByteArrayOutputStream();
    byte[] buf = new byte[4096];
    for (int n; 0 < (n = inputStream.read(buf));) {
        into.write(buf, 0, n);
    }
    into.close();
    return new String(into.toByteArray(), "UTF-8"); // Or whatever encoding
}
String text = new Scanner(inputStream).useDelimiter("\\A").next();

唯一棘手的是記住正則表達式\\A ,它匹配輸入的開頭。 這有效地告訴Scanner標記整個流,從開始到(不合邏輯的)下一個開始......
- 來自甲骨文博客

由於 Java 9 InputStream.readAllBytes()更短:

String toString(InputStream inputStream) throws IOException {
   return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); // Or whatever encoding
}

注意:本示例中關閉 InputStream。

您可以使用BufferedReader在循環中將流讀入StringBuilder ,然后從StringBuilder獲取完整內容:

public String convertStreamToString(InputStream is) { 
  BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
  StringBuilder sb = new StringBuilder(); 

  String line = null; 

  try { 
    while ((line = reader.readLine()) != null) { 
    sb.append(line + "\n"); 
    } 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } finally { 
    try { 
      is.close(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  }

  return sb.toString(); 
} 

完全披露:這是我在KodeJava.org 上找到的解決方案。 我把它貼在這里是為了評論和批評。

一個很好的方法是使用Apache commons IOUtils

IOUtils.toString(inputStream, string);

假設我有一個包含文本數據的InputStream ,並且我想將其轉換為String (例如,這樣我就可以將流的內容寫入日志文件)。

接受InputStream並將其轉換為String的最簡單方法是什么?

public String convertStreamToString(InputStream is) { 
    // ???
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM