프로그래밍 정리/자바

문자 스트림과 바이트 스트림

주누다 2013. 6. 18. 11:44
반응형

- 원래 스트림은 바이트 단위로 핸들하는 것을 기본으로 함.

문자도 내부적으로 바이트 단위로 되어 있으며, 프로그램에서 문자를 사용할 때는 적절한 문자 인코딩으로 변환해서 사용해야함.

이러한 불편을 해소하기 위해서 스트림 차원에서 문자를 처리해 주는 문자 스트림을 제공. 스트림을 바이트로 핸들하느냐 문자로 핸들하느냐에 따라서 두 가지 종류로 나눌 수 있음.


- 바이트와 문자에 대한 스트림의 종류

-> 바이트 스트림 : 바이트 단위

-> 문자 스트림 : 문자 단위


- 바이트 스트림

-> 바이트 스트림은 데이터를 바이트 단위로 주고 받는 것을 말함.

대표적인 바이트 스트림은 InputStream과 OutputStream임. 그렇다면 InputStream과 OutputStrea을 통과하는 단위는 당연히 바이트. 8bit의 이진 비트를 묶으면 바이트가 됨. 바로 그 바이트. 원래 데이터는 모두 바이트임.

알고 보면 그림도 바이트들로 이루어져 있고, 텍스트도 바이트로 이루어져 있음. 그리고 zip이나 jar같은 압축 파일도 일단은 바이트로 되어있음. 이 바이트들이 적절하게 변환되면 의미있는 데이터가 되는 것.

 바이트 스트림의 경우에는 원시 바이트를 그대로 주고 받겠다는 의미를 담고 있음.


- 문자 스트림

-> 문자 스트림은 이러한 바이트들을 2바이트씩 묶어서 사용할 수도 있고, 1바이트 단위로 사용할 수 있음.

그것은 문자 인코딩에 따라서 다르게 사용되어짐. 자바에서 사용하는 문자방식으로 유니코드(Unicode)방식임.

 그래서 바이트로 전송되어지는 것을 스트림에서 재해석한 후 유니코드 문자로 변환하게 됨.

결과적으로 바이트를 문자로 가공을 하는 것이며, 문자의 인코딩은 문자 스트림에서 자동으로 해석하게 됨.


- 스트림의 종류와 방향성

-> 입력 스트림의 방향

=> 나를 기준으로 데이터가 들어온다면 무조건 입력 스트림

-> 출력 스트림의 방향

=> 나를 기준으로 데이터가 밖으로 나간다면 무조건 출력 스트림

-> 바이트 스트림

=> 바이트 그 자체를 전송하는 스트림

-> 문자 스트림

=> 바이트를 문자로 인코딩하여 전송. 인코딩은 스트림이 담당.





- 바이트 스트림은 InputStream과 OutputStream 클래스를 상속, 대부분 InputStream과 OutputStream이라는 단어로 끝남.

-> 바이트 스트림들

=> AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream, BufferedInputStream, DataInputStream, PushbackInputStrea, ByteArrayOutputStream, FileOutputStream, FilterOutputStrea, ObjectOutputStream, OutputStream, PipedOutputStream, BufferedOutputStream, DataOutputStream, FileterOutputStream............

=> 한결같이 InputStream과 OutputStream이라는 단어를 달고 있음. 이러한 스트림을 바이트 스트림이라고 함.


- 문자 스트림은 Reader와 Writer를 달고 있음. 모두 문자 단위로 인코딩 처리를 하는 스트림들.

-> 문자 스트림들

=> Writer, BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, FileWriter, PipedWriter, PrintWriter, StringWriter, BufferedReader, LineNumberReader, CharArrayReader, InputStreamReader, FileReader, FilterReader, PushbackReader, PipedReader, StringReader


- 위의 스트림들은 문자 스트림이든 바이트 스트림이든, 둘 다 모두 처음엔 바이트로 받아들이는 것은 마찬가지. 그리고 해당 스트림이 알아서 처리를 해주는 것. 각각의 스트림의 역할은 가공하는 방법과 장치가 다를 뿐 자료의 입출력을 도아주는 중간 매개체로서의 역할은 동일. 각 장치에 맞는 스트림을 이용하는 것이 프로그래머가 하는 일.

 결론적으로 스트림은 원시 데이터를 프로그래머가 사용할 수 있는 데이터로 바꾸어 주는 역할. 물론 장치에 연결을 해주는 매개체 역할을 하는 것은 기본.


반응형

'프로그래밍 정리 > 자바' 카테고리의 다른 글

System.in  (0) 2013.06.18
표준 출력  (0) 2013.06.18
스트림의 종류  (0) 2013.06.18
스트림의 원리  (0) 2013.06.18
스트림(Stream)이란?  (0) 2013.06.17