[JAVA] java.io 패키지

army246·2022년 4월 21일
0

JAVA

목록 보기
9/10

📌 java.io

Java는 입출력 작업을 손쉽게 처리할 수 있도록 java.io 패키지를 제공해준다.

📌 Stream

java에서 데이터는 Stream(스트림) 을 통해서 입출력된다. Stream은 단일 방향으로 연속적으로 흘러가는 것을 말한다.
데이터가 저장되어 있는 저장소에서 프로그램으로 데이터를 읽어들이기 위한 연결은 '입력 스트림',
프로그램에서 목적지까지 데이터를 출력하기 위한 연결은 '출력 스트림'이라고 한다.

자바에서는 콘솔과 같은 표준 입출력 장치를 위해 System이라는 표준 입출력 클래스를 정의하고 있다.
java.lang 패키지에 포함되어 있는 System 클래스는 표준 입출력을 위해 다음과 같은 클래스 변수를 제공한다.

클래스 변수입출력 스트림설명
System.inInputStream콘솔로부터 데이터를 입력받음.
System.outPrintStream콘솔로 데이터를 출력함.

inInputStream 입력 스트림 객체를 참조하고,
out PrintStream 출력 스트림 객체를 참조한다.

입출력 과정에서 발생하는 Exception은 IOException으로 throws 한다.

java.lo 패키지에는 여러가지 종류의 스트림 클래스를 제공하고 있는데 크게 두 종류로 구분된다.

종류설명
바이트(byte) 기반 스트림그림, 멀티미디어 등 바이너리 데이터를 읽고 출력할 때 사용
문자(Character) 기반 스트림문자 데이터를 읽고 출력할 때 사용
  • InputStream,OutputStream바이트 기반 입출력 스트림의 최상위 클래스이다.
    이 클래스의 하위 클래스는 모두 바이트 기반 입출력 스트림이고, 클래스 접미사로 InputStream,OutputStream이 붙는다.

  • Reader, Writer문자 기반 입출력 스트림의 최상위 클래스이다.
    이 클래스의 하위 클래스들은 모두 문자 기반 입출력 스트림이고, 클래스 접미사로 Reader, Writer가 붙는다.

바이트 기반 입출력

📌 InputStream (바이트 입력 스트림)

바이트 기반 입력 스트림의 최상위 클래스이며 추상 클래스이다.
모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속받아서 만들어진다.
FileInputStream, BufferedInputStream, DataInputStream 클래스는 모두 InputStream 클래스를 상속 하고 있다.

❗️ InputStream 주요 메소드

리턴 타입메소드설명
intread()1byte를 읽고 읽은 바이트를 리턴
intread(byte[] b읽은 바이트를 매개값으로 주어진 배열에 저장하고 읽은 바이트 수를 리턴
intread(byte[]b, int off, int len)len개의 바이트를 읽고 매개값으로 주어진 배열에서 b[off]부터 len개까지 저장, 읽은 바이트 수를 리턴
voidclose()입력 스트림을 닫음

read() 메소드는 입력한 데이터 중에서 1바이트의 데이터를 읽어서 정수(int)로 리턴해준다.
근데 더이상 읽을 데이터가 없으면 -1를 리턴한다.
이를 문자로 출력하기 위해서는 명시적 타입 변환이 필요하다.

📌 FileInputStream (바이트단위 파일 입력 스트림)

파일 입력을 처리하기 위해서 사용하는 Stream이다.
특정 파일로부터 데이터를 읽기 위해서 FileInputStream을 사용한다.
바이트 단위로 읽기때문에 실행 결과를 보면 한글이 깨진다.

📌 OutputStream (바이트 출력 스트림)

바이트 기반 출력 스트림의 최상위 클래스이며 추상 클래스이다.
모든 바이트 기반 출력 스트림은 OutputStream 클래스를 상속받아서 만들어진다.
FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream 클래스는 모두 OutputStream 클래스를 상속 하고 있다.

❗️ OutputStream 주요 메소드

리턴 타입메소드설명
voidwrite(int b)1byte를 출력
voidwrite(byte[] b)매개값으로 주어진 배열b의 모든 바이트 출력
voidwrite(byte[] b, int off, int len)매개값으로 주어진 배열b[off]부터 len개까지의 바이트를 출력
voidflush()출력 버퍼에 잔류하는 모든 바이트를 출력
voidclose()출력 스트림을 닫음

📌 FilerOutputStream (바이트 단위 파일 출력 스트림)

특정 파일에 데이터를 출력시키기 위해서는 FilerOutoutStream 을 통해서 데이터를 출력할 파일과 연결시켜야 한다.
FilerOutputStream은 1바이트 데이터를 출력할 때 사용한다. 그래서 한글 깨져서 출력된다.

문자 기반 입출력

📌 Reader (문자 입력 스트림)

문자 기반 입력 스트림의 최상위 클래스이며 추상 클래스이다.
모든 문자 기반 입력 스트림은 Reader 클래스를 상속받아서 만들어진다.
FileReader, BufferedReader, InputStreamReader 클래스는 모두 Reader 클래스를 상속 하고 있다.

❗️ Reader 클래스 주요 메소드

리턴 타입메소드설명
intread()1개의 문자를 읽고 리턴
intread(char[] cbuf)읽은 문자들을 매개값으로 주어진 문자 배열에 저장하고 읽은 문자 수를 리턴
intread(char[] cbuf, int off, int len)len개의 문자 읽고 매개값으로 주어진 문자 배열에서 cbuf[off]부터 len개까지 저장, 읽은 문자수 리턴
voidclose()입력 스트림을 닫음

read() 메소드는 입력 스트림으로부터 1개 문자(2byte)를 읽고 int(4byte) 타입으로 리턴한다.
한글 등 깨지지 않는다.

📌 FileReader (문자 단위 파일 입력 스트림)

파일 입력을 처리하기 위해서 사용하는 Stream이다.
파일 입력을 처리하기 위해서 FileReader를 사용한다.
실행 결과를 보면 한글이 깨지지 않는다.

📌 BufferedReader

파일로부터 데이터를 읽을 때 성능을 향상시키기 위해서 버퍼를 사용하는데 그 스트림이 BufferedReader이다.

BufferedReader는 대표적인 필터 스트림이다. FileReader를 통해서 데이터를 읽을 때 메모리 상에 버터를 생성해서 버터 단위로 데이터를 읽을 때 사용한다.

FilerReader에 BufferedReader를 결합시키면 데이터를 라인 단위로 읽을 수 있는 readLine() 메소드를 사용할 수있다.

📌 Writer (문자 출력 스트림)

문자 기반 출력 스트림의 최상위 클래스이며 추상클래스이다.
모든 문자 기반 출력 스트림 클래스는 Write 클래스를 상속받아서 만들어진다.
FileWriter, BufferedWriter, PrintWriter, OutputStreamWriter 클래스는 모두 Writer 클래스를 상속 하고 있다.

❗️ Writer 클래스 주요 메소드

리턴 타입메소드설명
voidwrite(int c)매개값으로 주어진 한 문자를 보냄
voidwrite(char[] cbuf)매가값으로 주어진 배열의 모든 문자를 보냄
voidwrite(char[] cbuf, int off, int len)매개값으로 주어진 배열에서 cbuf[off]부터 len개까지의 문자를 보냄
voidwrite(String str)매개값으로 주어진 문자열을 보냄
voidwrite(String str, int off, int len)매개값으로 주어진 문자열에서 Off 순번부터 Len개까지의 문자를 보냄
voidflush()버퍼에 잔류하는 모든 문자를 출력
voidclose()출력 스트림을 닫음

📌 FilerWriter (문자 단위 파일 출력 스트림)

문자 단위 파일 출력 스트림인 FileWriter 를 사용해서 출력하면 한글이 깨지지 않고 출력된다.
FileWriter 은 write(String str) 메소드를 통해서 문자열이 바로 출력될 수 있게 지원한다.

참고
혼자공부하는자바

profile
천천히 꾸준히

0개의 댓글