그래서 SMTP 서버를 만들고있는 프로젝트에서 작업하고 있습니다. 각 입력 줄을 읽은 다음 해당 줄을 처리를 위해 다른 스레드에 전달하려고합니다. 그러나이 코드에서는 연결이 종료 될 때까지 회선이 보내지지 않습니다. 저자는 우리 있다고하기 때문에 나는 또한 엘리엇 해롤드으로 "자바 네트워크 4 판 프로그래밍"인용하기 위하여려고하고있다리더에서 각 줄을 인쇄하는 방법
while (true) {
StringBuilder line = new StringBuilder();
try {
int c;
while ((c = in.read()) != -1){ //this reads the line
line.append((char) c); //add the character to our line
}
String response = Parser.parse(line.toString); //give the line we just read to the parser for processing
} catch (IOException ex) {
System.err.println("IOException while reading the clients mesasge");
}
}
: 나는 새로운 라인은 while 루프를 중단하지 않는다는 사실과 관련이있다 생각 다른 운영 체제에는 다른 줄 바꿈 delimeter (\ n 또는 \ r \ n 또는 다른 것)가 있기 때문에 BufferedReader 또는 DataInputStream의 readLine() 메서드를 사용하지 않아야합니다.
또한 이러한 스트림 중 하나를 사용하지 않습니다. 그래서 내가 readLine()을 사용하기 원한다고해도 나는 할 수 없을 것입니다.
사람은 내가
사실 두 개 이상의 문자를 읽습니다. 현재 EOF까지 읽습니다. 전체 줄을 읽으려고하지만 위에 언급 한 것처럼 작성자는 다른 운영 체제의 줄 바꿈 문자가 다르기 때문에 readLine()을 사용해서는 안됩니다. – yasgur99
@ yasgur99 EOF까지 한 번에 한 문자 씩 읽습니다. 라인과는 아무 관련이 없습니다. 당신의 저자는 틀렸고 Javadoc을 읽을 필요가 있습니다. – EJP
그래서 readLine()은 안전합니까? – yasgur99