【问题标题】:Append InputStream object to String object [duplicate]将 InputStream 对象附加到 String 对象[重复]
【发布时间】:2012-11-23 06:17:07
【问题描述】:

可能重复:
Read/convert an InputStream to a String

我正在尝试将 InputStream 对象中的数据附加到字符串中,如下所示:

byte[] buffer = new byte[8192];
InputStream stdout;
String s = "";      
while(IsMoreInputDataAvailable()) {
    int length = this.stdout.read(buffer);
    s += new String(this.buffer, 0, length, "ASCII");

在不使用 Apache 或类似库的情况下,有没有更简单的方法?

【问题讨论】:

    标签: java


    【解决方案1】:

    InputStream 读取字符数据的常用方法是将其包装在Reader 中。 InputStreams 用于二进制数据,Readers 用于字符数据。从InputStream 读取的适当Reader 是恰当命名的InputStreamReader

    Reader r = new InputStreamReader(stdout, "ASCII");
    char buf = new char[4096];
    int length;
    StringBuilder s = new StringBuilder();
    while ((length = r.read(buf)) != -1) {
        s.append(buf, 0, length);
    }
    String str = s.toString();
    

    请注意,在循环内重复附加到 String 通常是一个坏主意(因为每次您都需要复制整个字符串),所以我在这里使用 StringBuilder

    【讨论】:

      【解决方案2】:

      这是a link 的几种方法(有和没有外部库)。 一种方法(从上面的链接中提取)是使用 Java 扫描器(从 Java 5 开始):

      public class InputStreamTest {
      
          public static void main(String args[]) throws FileNotFoundException {
              FileInputStream fis = new FileInputStream("c:/sample.txt");
              String inputStreamString = new Scanner(fis,"UTF-8").useDelimiter("\\A").next();
              System.out.println(inputStreamString);
          }
      }
      

      【讨论】:

      • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
      • 是的,你是对的——我刚刚改进了答案。
      猜你喜欢
      • 2016-02-24
      • 2015-11-01
      • 1970-01-01
      • 2015-11-24
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      相关资源
      最近更新 更多