문제

소켓의 입력 스트림에서 읽고 있습니다. 들어오는 데이터를 즉석에서 구문 분석하고 있기 때문에 캐릭터별로 문자를 읽어야합니다.

하다 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에서 바이트를 읽고 문자로 변환 한 다음 반환 할 수 있는데, 이는 매우 비효율적 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top