Nice programing

Reader와 InputStream의 차이점은 무엇입니까?

nicepro 2020. 10. 7. 08:17
반응형

Reader와 InputStream의 차이점은 무엇입니까?


Reader와 InputStream의 차이점은 무엇입니까? 그리고 언제 무엇을 사용합니까? Reader를 사용하여 문자를 읽을 수 있다면 왜 inputstream을 사용할까요? 객체를 읽을까요?


InputStream은 리소스에서 정보를 가져 오는 원시 방법입니다. 어떤 종류의 변환도 수행하지 않고 바이트 단위로 데이터를 가져옵니다. 이미지 데이터 또는 바이너리 파일을 읽는 경우 이것이 사용할 스트림입니다.

리더는 문자 스트림 용으로 설계되었습니다. 읽고있는 정보가 모두 텍스트 인 경우 리더는 문자 디코딩을 처리하고 원시 입력 스트림에서 유니 코드 문자를 제공합니다. 모든 유형의 텍스트를 읽는 경우 사용할 스트림입니다.

InputStreamReader 클래스를 사용하여 InputStream을 래핑하고 Reader로 변환 할 수 있습니다.

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

InputStreams는 스트림에서 바이트를 읽는 데 사용됩니다. 따라서 이미지, 비디오 및 직렬화 된 객체와 같은 이진 데이터에 유용합니다.

반면에 리더는 문자 스트림이므로 문자 데이터를 읽는 데 가장 적합합니다.


나는 혼란의 근원이 그 추측 InputStream.read()반환 int하고 Reader.read()도 반환합니다 int.

차이점은 InputStream.read()바이트 스트림의 원시 콘텐츠에 해당하는 0에서 255 사이의 바이트 값을 Reader.read()반환하고 0에서 65357 사이의 문자 값을 반환한다는 것입니다 (65358 개의 서로 다른 유니 코드 코드 포인트가 있기 때문).

InputStream당신이 내용이, 바이트로 바이트 예를 들어 내용을 읽을 수 "는 ‡ A는"즉 5 바이트의 스트림으로 읽기, 97, 226, 128, 16197a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161.

A는 Reader당신이 문자 때문에 내용의 "‡ A는"3 개 문자로 읽기에 의해 내용의 문자를 읽을 수 97, 8225그리고 97어디에 a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0x2021 -> 8225.


하나는 바이트를 허용하고 다른 하나는 문자를 허용합니다.

참고 URL : https://stackoverflow.com/questions/4367539/what-is-the-difference-between-reader-and-inputstream

반응형