2017-04-06 4 views
-1

그래서 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()을 사용하기 원한다고해도 나는 할 수 없을 것입니다.

사람은 내가

답변

1
while ((c = in.read()) != -1){ //this reads the line 

아니 그렇지 할 노력하고있어 달성 할 수있는 방법에 대해 어떤 생각을 가지고있다. 한 문자를 읽습니다.

BufferedReader.readLine()을 사용하십시오.

저자는 서로 다른 운영 체제가 다른 줄 바꿈을 가지고 있기 때문에 우리는 BufferedReader로의 내의 readLine() 메소드 또는의 DataInputStream을 사용하지 않도록 말한다 때문에 나는 또한 엘리엇 해롤드으로 "자바 네트워크 4 판 프로그래밍"인용하기 위하여려고하고있다

delimeter (\ n 또는 \ r \ n 또는 다른 것).

Elliot Rusty Harold는 Javadoc을 읽어야합니다. 이것은 학년 A 학점입니다. 이 책의 많은 실수에 대해서는 Amazon의 리뷰를 참조하십시오.

+0

사실 두 개 이상의 문자를 읽습니다. 현재 EOF까지 읽습니다. 전체 줄을 읽으려고하지만 위에 언급 한 것처럼 작성자는 다른 운영 체제의 줄 바꿈 문자가 다르기 때문에 readLine()을 사용해서는 안됩니다. – yasgur99

+0

@ yasgur99 EOF까지 한 번에 한 문자 씩 읽습니다. 라인과는 아무 관련이 없습니다. 당신의 저자는 틀렸고 Javadoc을 읽을 필요가 있습니다. – EJP

+0

그래서 readLine()은 안전합니까? – yasgur99

관련 문제