Java의 InputStream에서 0으로 끝나는 문자열을 읽어야합니다.0- 종료 문자열 용 Java BufferedReader
제로 종료 문자열을 읽는 데 BufferedReader.readLine() 메서드가 있습니까?
Java의 InputStream에서 0으로 끝나는 문자열을 읽어야합니다.0- 종료 문자열 용 Java BufferedReader
제로 종료 문자열을 읽는 데 BufferedReader.readLine() 메서드가 있습니까?
아니요. 자바에서는 제로 종료 문자열을 인식하지 않습니다. InputStream
을 읽고 0 바이트를 찾아야합니다.
문자 인코딩 문제는 해결되지 않습니다. InputStream
은 바이트 스트림을 제공하므로 Reader
을 통해 문자를 인코딩해야합니다. 멀티 바이트 문자 인코딩을 사용하면 문제가 더욱 복잡해집니다.
아래와 비슷한 방법을 만들 수 있습니다. InputStream
에서 BufferedReader
을 만듭니다. 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);
}
당신은 또한 "제로"라는 뜻이 무엇인지 이해하는 것이 필요합니다. 입/출력 스트림은 바이트를 처리하지만 판독기/기록기는 문자를 처리합니다. 0 문자와 일치 시키려면 byte to char 변환 인코딩이 작동합니다.
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.util. * '클래스가되어야합니다. – corsiKa
작동하는 경우 문자 인코딩에 따라 다릅니다. 실제로 그는 Reader에서 읽고 0 바이트가 아닌 0 문자를 찾아야합니다. – jarnbjo
그는 * InputStream *에서 0으로 끝나는 문자열을 명시 적으로 요구합니다. 그때부터 그는 혼란 스럽네요 BufferedReader –
당신이 InputStream에서 문자와 문자열을 읽을 수 없기 때문에 반쯤 틀린 대답으로 그를 혼동하지 말라고 당신에게 친절하지 않습니까? – jarnbjo