9

可能重复:
将 InputStream 读取/转换为字符串

我正在尝试将 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 或此类库的情况下做到这一点?

4

2 回答 2

6

从 an 读取字符数据的常用方法InputStream是将其包装在Reader. InputStreams 用于二进制数据,Readers 用于字符数据。Reader从 an 中读取的适当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在循环内重复附加 a 通常是一个坏主意(因为每次您都需要复制整个字符串),所以我在StringBuilder这里使用 a 。

于 2012-12-05T12:11:35.077 回答
2

这是几个方法的链接(有和没有外部库)。一种方法(从上面的链接中提取)是使用 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);
    }
}
于 2012-12-05T12:14:53.180 回答