자바에서의 데이터 입출력(Java.io 패키지)

홍석진·2021년 9월 10일
0

JAVA

목록 보기
8/10
post-thumbnail

👉오늘의 정리(Java.io) io = input, output

몇일에 걸쳐서 파일업로드에 대한 자세한 흐름을 살펴보고 있는 중 입니다. 코드를 열심히 보고 있는데 생각해보니 입출력을 위한 클래스들에 대해서 자세히는 모르고 있다는 느낌을 받아서 한번 정리해 보면 좋겠다는 생각이들어 오늘은 Java.io 패키지에 대해서 공부를 했습니다.

Java.io package

파일 업로드를 처리할 때 가장 많이 보는 패키지입니다. 이 패키지는 자바의 기본적인 데이터 입출력을 담당합니다. 오늘 정리할 내용은 이 패키지 안에 File 관련 클래스들입니다(File 말고 Byte, Piped, Audio가 있음). 바이트 단위에 입출력과 문자 단위 입출력을 잘 확인하면서 아래의 표를 확인합니다.

java.io 클래스설명
File파일 시스템의 파일 정보를 얻기 위한 클래스
Console콘솔로 부터 문자를 입출력 하기 위한 클래스
------------------------------------------------------------------------------------------------------------------------
InputStream / OutputStream바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스
------------------------------------------------------------------------------------------------------------------------
FileInputStream / FileOutputStream바이트 단위 입출력을 위한 하위클래스
DataInputStream / DataOutputStream바이트 단위 입출력을 위한 하위클래스
PrintStream바이트 단위 입출력을 위한 하위클래스
BufferedInputStream / BufferedOutputStream바이트 단위 입출력을 위한 하위클래스
------------------------------------------------------------------------------------------------------------------------
Reader / Writer문자 단위 입출력을 위한 최상위 입출력 스트림 클래스
------------------------------------------------------------------------------------------------------------------------
FileReader / FileWriter문자 단위 입출력을 위한 하위 입출력 스트림 클래스
InputStreamReader / OutputStreamWriter문자 단위 입출력을 위한 하위 입출력 스트림 클래스
PrintWriter문자 단위 입출력을 위한 하위 입출력 스트림 클래스
BufferedReader / BufferedWriter문자 단위 입출력을 위한 하위 입출력 스트림 클래스

입출력을 위한 큰 분류 기준으로 바이트단위, 문자단위 입출력으로 나뉩니다.
바이트 단위 입출력의 특징으로는 모든 종류의 데이터들을 주고받을 수 있습니다.
문자 단위 입출력의 특징으로는 오로지 문자만 주고받을 수 있게 특화되어 있습니다.
이렇게 단위 입출력이 나눠지게 된 이유는 C언어의 경우에는 ASCII 코드를 사용해서 문자가 1byte 단위인데 자바의 경우 문자(char)가 2byte를 사용해서 문자 단위 입출력에 바이트 단위 입출력을 사용하기에 상당히 번거로웠다고 합니다.
위에서 문자 단위의 입출력은 단위로 구별하는 것 말고도 분류조건이 있습니다. 바로 BufferedStream 또는 보조스트림인데, 표를 자세히 보시면 클래스 명에 Buffered가 들어가는 것들이 있습니다. 물론 모든 보조스트림이 Buffered로 시작되지는 않지만 Buffered가 들어가면 보조스트림이라는 것을 알 수 있습니다. Buffer란 일시적으로 데이터를 기억시키는 장치입니다. 이름에 걸맞게 내부적으로 8192byte 크기의 배열을 가지고 있어서 1, 2byte씩 데이터를 전송하는 스트림보다 더 빠른 입출력이 가능합니다. 보조스트림은 단독으로는 사용할 수 없지만 스트림을 불러오고 중간에 버퍼기능을 하는 보조스트림을 사용해서 보조스트림을 이용해서 입력을 수행합니다.(내부를 들여다 보면 스트림이 입력을 수행한다)

스트림에 개념자체에는 엄청 어려운 내용이 없습니다. 하지만 직접 코드를 짤 때 상황에 따른 스트림과 보조스트림을 잘 선택해서 사용하는 것이 중요할 것 같습니다. 파일 업로드 뿐만 아니라 정말 많이 쓰이기 때문에 확실하게 알아두고 비교하며 여러번 사용하려 합니다.

profile
질문이나 의견이 있으시면 남겨주세요. 서로의 발전이라고 생각합니다.

0개의 댓글