2010-12-06 4 views
63

Reader와 InputStream의 차이점은 무엇입니까? 그리고 언제 뭘 사용합니까? Reader를 사용하여 입력 스트림을 사용해야하는 문자를 읽는 데 사용할 수 있다면 객체를 읽는다고 생각하십니까?Reader와 InputStream의 차이점은 무엇입니까?

+1

"객체를 읽을 것 같습니까?"와 관련하여 Java 객체 읽기/쓰기를위한 특수한 입력/출력 스트림이 있습니다. 그것들은 각각 ObjectInputStream 및 ObjectOutputStream이며 더 큰 직렬화 프레임 워크의 일부입니다. http://java.sun.com/developer/technicalArticles/Programming/serialization/ 단 한가지 입출력 스트림 사용, 다른 것들은 소켓 등을 통해 데이터를 보낼 수 있습니다. –

답변

93

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

리더는 문자 스트림 용으로 설계되었습니다. 읽는 정보가 모두 텍스트이면 Reader가 사용자에게 문자 해독을 처리하고 원시 입력 스트림에서 유니 코드 문자를 제공합니다. 어떤 유형의 텍스트라도 읽고 있다면, 이것은 사용할 스트림입니다.

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

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

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

12

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

독자는 문자 스트림이므로 문자 데이터를 읽는 데 가장 잘 사용됩니다.

+0

'read()'바이트를 사용하는 경우 (byte [])'배열을 언제 사용할 것인지를 지정한다. 독서 배열이 항상 더 낫다고 생각합니다. 그럼 당신은 어디에 바이트 (Read) (바이트) 또는 '읽기 (바이트 [])'배열을 사용하여'read()'를 사용하여 예제를 줄 수 있습니다. 또는'BufferedInputStream'.? – UnKnown

0

나는 혼란의 원인이 InputStream.read()intReader.read()는 또한 int 반환 반환 것 같다.

차이는 0과 255 사이 InputStream.read() 복귀 바이트 값 바이트 스트림의 원시 콘텐츠에 대응하고 InputStream는 내용에 의해 바이트 읽을 수

0 내지 65,357이다 문자 값을 반환 Reader.read()이다 예를 들어 내용 "a ‡ a"는 97, 226, 128, 161, 97으로 읽 힙니다. 여기서 a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161입니다.

Reader 내용을 "a ‡ a"내용이 97, 8225, 97으로 읽히도록 a -> U+0061 -> 0x61 -> 97‡ -> U+2021 -> 0x2021 -> 8225으로 읽습니다.

관련 문제