Java-Sockets : inputStream.read () vs bufferedReader.Read ()
-
20-09-2019 - |
문제
소켓의 입력 스트림에서 읽고 있습니다. 들어오는 데이터를 즉석에서 구문 분석하고 있기 때문에 캐릭터별로 문자를 읽어야합니다.
하다 BufferedReader.read()
같은 것 InputStream.read()
하다 ? (BufferedReader가 입력 스트림으로 기본으로 구성되었다고 가정)
각 문자를 별도로 읽을 때 InputStream.Read ()를 사용하는 것이 더 효율적입니까? 아니면 더 좋은 방법이 있습니까?
해결책
BufferedReader는 기본 독자의 여러 문자를 읽습니다. 입력 스트림은 바이트를 제공합니다. 그래서 그들은 2 개의 별개의 데이터 유형을 연구하고 있습니다. 스트림 주위에 독자를 어떻게 감싸고 있습니까? 아마도 당신은 다음과 같은 것을 갈 것입니다.
BufferedReader in
= new BufferedReader(new InputStreamReader(socket));
이 경우 캐릭터 인코딩을 지정하는 데주의를 기울일 것입니다.
최적화의 관점에서 볼 때, 버퍼드 리더를 사용하는 것이 더 나을 것입니다. 한 번에 여러 킬로바이트를 읽고 원하는 경우 각 캐릭터를 취할 수 있기 때문입니다 (반드시 새로운 IO 읽기를 강요 할 필요는 없습니다).
다른 팁
inputstream 클래스의 read () 메소드는 추상 방법입니다. ITSTREAMRREADER가 추측해야합니다. 귀하의 질문으로 되돌아 가기, read () inputStreamReader 및 BufferesReader 클래스의 read () 메소드는 동일한 작업을 수행합니다. 캐릭터의 ASCII 값을 반환합니다. BufferedReader는 버퍼링이라고 불리는 것을 사용하여 우리가 읽는 huble을 줄일 수 있습니다. inputStreamReader를 사용하는 경우 read ()의 각 호출로 인해 디스크/stdin에서 바이트를 읽고 문자로 변환 한 다음 반환 할 수 있는데, 이는 매우 비효율적 일 수 있습니다.