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

から文字データを読み取る通常の方法InputStreamは、それを。でラップすることReaderです。InputStreamsはバイナリデータ用、Readersは文字データ用です。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代わりにここを使用しています。

于 2012-12-05T12:11:35.077 に答える
2

これを行うためのいくつかの方法へのリンクがあります(外部ライブラリがある場合とない場合)。これを行う方法(上記のリンクから抽出)は、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);
    }
}
于 2012-12-05T12:14:53.180 に答える