将InputStream对象追加到String对象

时间:2012-12-05 12:08:47

标签: java

  

可能重复:
  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或此类库的情况下,有更简单的方法吗?

2 个答案:

答案 0 :(得分:5)

InputStream读取字符数据的常用方法是将其包装在Reader中。 InputStream用于二进制数据,读者用于字符数据。从Reader中读取的相应InputStream名称恰当为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代替

答案 1 :(得分:2)

这里有a link几种方法(有和没有外部库)。 一种方法(从上面的链接中提取)是使用Java Scanner(从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);
    }
}