모든 문자를 읽을 때 InputStreamReader보다 BufferedReader를 사용하는 이유가 있습니까?

StackOverflow https://stackoverflow.com/questions/31380

문제

현재 다음 함수를 사용하여 간단한 HTTP GET을 수행합니다. 라코 디스

모든 것을 순서대로 다운로드 할 것이므로 BufferedReader를 사용할 이유가 없습니다.이 경우 BufferedReader가 사용되지 않는다고 생각하는 것이 맞습니까?

도움이 되었습니까?

해결책

이 경우, 나는 당신이하던대로 할 것입니다 (스트림 버퍼 중 하나가 아닌 버퍼링을 위해 바이트 배열을 사용).

하지만 예외가 있습니다. 버퍼 (이번 출력)가 보이는 곳은 서블릿 API에 있습니다. 데이터는 flush () 가 호출 될 때까지 기본 스트림에 기록되지 않으므로 출력을 버퍼링 할 수 있지만 오류가 발생하면 버퍼를 덤프하고 대신 오류 페이지를 작성합니다. mark (int) reset () 을 사용하여 다시 읽기 위해 스트림을 재설정해야하는 경우 입력을 버퍼링 할 수 있습니다. 예를 들어 스트림을 전달할 콘텐츠 처리기를 결정하기 전에 파일 헤더를 검사 할 수 있습니다.

관련이 없지만 스트림 처리를 다시 작성해야한다고 생각합니다. 이 패턴은 리소스 누출을 방지하는 데 가장 효과적입니다. 라코 디스

여러 스트림을 여는 경우 try / finally 블록을 중첩합니다.

코드에서 수행하는 또 다른 작업은 반환 된 콘텐츠가 VM의 기본 문자 집합으로 인코딩된다고 가정하는 것입니다 (사용 사례에 따라 적절할 수 있음).

다른 팁

정확합니다. BufferedReader를 사용하여 HTTP 콘텐츠와 헤더를 읽는 경우 InputStreamReader를 사용하여 바이트 단위로 읽을 수 있습니다.

이 시나리오의 BufferedReader는 때때로 이상한 일을합니다 ... 특히 HTTP POST 헤더를 읽을 때 가끔 POST 데이터를 읽을 수 없습니다. InputStreamReader를 사용하면 콘텐츠 길이를 읽고 그만큼 읽을 수 있습니다.바이트 ...

내 직감에 따르면 이미 바이트 배열을 사용하여 버퍼링을 수행하고 있으므로 BufferedReader를 사용하는 것이 중복됩니다.

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