2012-11-28 3 views
4

스레드가 실행 중이고 실행될 때마다 라인을 기다리는 데 방해가 되더라도 BufferedReader에서 읽을 새 줄이 있는지 확인해야합니다. 따라서 전체 코드가 중지됩니다.BufferedReader, 읽은 텍스트가 남아 있는지 감지합니다.

if((inputLine = bufferedReader.readLine()) != null){ 
       System.out.println(inputLine); 
       JOptionPane.showMessageDialog(null, inputLine); 
} 

더 잘 읽을 수있는 BufferedReader에서 텍스트가 있는지 확인하는 방법이 있나요?

+0

왜? 데이터가 없으면 차단됩니다. 그 대신에 무엇을 할 것입니까? – EJP

+1

'BufferedReader # ready()'를 사용해 보셨습니까? http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#ready()? – reprogrammer

+0

나는'ready()'가 그 필요에 대답 할 것이라고 생각하지 않는다. 'ready()'는 버퍼에 무엇인가 있는지를 알려줍니다; 읽을만한 전체 줄이 있는지 여부를 알려주지 않습니다. 'readLine()'은 여전히 ​​대기 상태가됩니다. – Isaac

답변

3

아니요, 쉬운 방법은 없습니다. BufferedReaderready 호출을 가지고 있지만 readLine 호출이 아닌 read 호출에만 적용됩니다. 차단하지 않을 것이 확실한 readLine을 원한다면 read을 사용하고 직접 char 버퍼를 유지해야합니다.

+0

그래서 준비가되면 거기에 텍스트가 없으면 건너 뜁니다. readlLine은 그냥 공백을 사용할 수 있도록했습니다. – user1729831

0

은 (a 라인 종료 문자 구분) 전체 라인, 또는 입력의 종료를 읽을 수없는 블록 것이다 readLine 방법 도달 :

http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()

케이스를 ' 다시 말하면 입력 끝이 아직 도달하지 않았지만 "줄"(즉, 줄 종결 자로 끝나는 일련의 문자)을 구성하기에 충분한 문자가 버퍼에 없습니다.

레벨은 readLine 레벨보다 낮아야하며 가능하다면 스트림 레벨 자체가되어야합니다. InputStream에는 available()이라는 방법이 있습니다.

1

먼저 읽을 준비가 되었습니까? 그냥 bufferedReader.ready()을 사용하십시오.

편집 :

ready 당신이 줄 준비가 있다면 당신에게 말할 것이다, 그냥 읽을 수 뭔가가 있다는 것을 알려줍니다. 그러나 선을 얻으려는 경우이 방법이 효과적입니다. 아이디어는 준비가되었는지 먼저 확인한 다음 라인을 읽는 것입니다. 이렇게하면 읽을 것이 전혀 없을 때 스레드가 거기에 걸리지 않습니다.

+2

'ready()'는'true'를 반환 할 것이지만'readLine()'은 버퍼에 라인 종결자가없는 문자가 포함되어 있으면 여전히 블록 될 수 있습니다. – Isaac

+0

일반적으로 신뢰할 수있는 것은 아니며 (위조 방지가 허용됨) 어떤 경우에도 전체 줄이 아닌 문자가 하나 이상 있는지 확인합니다. – erickson

관련 문제