2

JavaのInputStreamからゼロで終了する文字列を読み取る必要があります。

ゼロで終了する文字列を読み取るためのBufferedReader.readLine()メソッドに似たものはありますか?

4

4 に答える 4

8
package com;

import java.io.*;
import java.util.Scanner;

public class AAA {

    private static final String ENCODING = "UTF-8";

    public static void main(String[] args) throws Exception {
        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
        bOut.write("the first line".getBytes(ENCODING));
        bOut.write(0);
        bOut.write("the second line\r\n (long one)".getBytes(ENCODING));
        bOut.write(0);
        bOut.write("the third line".getBytes(ENCODING));
        printLines(new ByteArrayInputStream(bOut.toByteArray()));
    }

    public static void printLines(InputStream in) {
        Scanner scanner = new Scanner(in, ENCODING);
        scanner.useDelimiter("\u0000");
        while (scanner.hasNext()) {
            System.out.println(scanner.next());
            System.out.println("--------------------------------");
        }
    }
}
于 2009-11-06T12:03:43.657 に答える
1

いいえ。Javaはゼロで終了する文字列をそのように認識しません。を読んInputStreamで、0バイトを探す必要があります。

これは文字エンコードの問題に対処していないことに注意してください。はバイトのストリームを提供し、次にInputStreamを介して文字にエンコードする必要がありますReader。マルチバイト文字エンコーディングを使用している場合、問題はより複雑になります。

于 2009-11-06T10:41:11.013 に答える
1

また、「ゼロ」が何を意味するのかを理解する必要があります。入出力ストリームはバイトを処理しますが、リーダー/ライターは文字を処理します。ゼロ文字と照合したい場合は、バイトから文字への変換エンコーディングが機能します。

于 2009-11-06T11:37:44.963 に答える
0

以下のようなメソッドを作成できます。BufferedReaderからを作成しますInputStream。はBufferedReader参照によって渡されるため、状態が保持されます。インスタンス変数にも簡単に保存できます。

public String readLine(BufferedReader buff) throws IOException{
    int c = buff.read();
    // if EOF
    if (c == -1){
        return null;
    }
    StringBuilder builder = new StringBuilder("");
    // Check if new line or EOF
    while (c != -1 && c != 0){
        builder.append((char) c);
        c = buff.read();
    }
    return builder.toString();
}

...。

String line = reader.readLine(buff);
while (line != null)
{
System.out.println(line);
line = reader.readLine(someBufferedReader);

}
于 2009-11-06T10:57:20.133 に答える