我正在尝试将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或此类库的情况下,有更简单的方法吗?
答案 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);
}
}