将InputStream对象追加到String对象

可能重复:
读取/转换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或这样的库?


InputStream读取字符数据的常用方法是将其包装在Reader 。 InputStreams用于二进制数据,读者用于字符数据。 要从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


这里有几种方法的链接(带和不带外部库)。 一种方法(从上面的链接中提取)使用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);
    }
}
链接地址: http://www.djcxy.com/p/13731.html

上一篇: Append InputStream object to String object

下一篇: Reading an inputStream all at once