JavaのInputStreamからゼロで終了する文字列を読み取る必要があります。
ゼロで終了する文字列を読み取るためのBufferedReader.readLine()メソッドに似たものはありますか?
JavaのInputStreamからゼロで終了する文字列を読み取る必要があります。
ゼロで終了する文字列を読み取るためのBufferedReader.readLine()メソッドに似たものはありますか?
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("--------------------------------");
}
}
}
いいえ。Javaはゼロで終了する文字列をそのように認識しません。を読んInputStream
で、0バイトを探す必要があります。
これは文字エンコードの問題に対処していないことに注意してください。はバイトのストリームを提供し、次にInputStream
を介して文字にエンコードする必要がありますReader
。マルチバイト文字エンコーディングを使用している場合、問題はより複雑になります。
また、「ゼロ」が何を意味するのかを理解する必要があります。入出力ストリームはバイトを処理しますが、リーダー/ライターは文字を処理します。ゼロ文字と照合したい場合は、バイトから文字への変換エンコーディングが機能します。
以下のようなメソッドを作成できます。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);
}