2012-12-05 127 views
2

可能重复:
Read/convert an InputStream to a String追加InputStream对象为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或这样的库?

回答

5

通常从InputStream读取字符数据的方法是将其包装在Reader中。 InputStreams用于二进制数据,读者用于字符数据。适当ReaderInputStream读取被恰当地命名为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扫描仪(自爪哇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); 
    } 
} 
+1

虽然这在理论上可以回答的问题,[这将是优选的](HTTP://元.stackexchange.com/q/8259)在这里包括答案的基本部分,并提供参考链接。 –

+0

是的,你是对的 - 我刚刚改进了答案。 – acostache