코딩항해기

[JAVA] 파일 입출력 본문

JAVA

[JAVA] 파일 입출력

miniBcake 2024. 7. 29. 12:22

 

 

자바 입출력 스트림 특징

자바에서는 입출력이 동시에 진행되는 것이 아니라 독립적으로 한 가지 기능만 동작하기 때문에 데이터를 교환하기 위해서는 입력 스트림과 출력 스트림이 따로 필요하다.

  • 스트림은 입출력 장치와 자바 프로그램 간의 연결 통로로 스트림의 양 끝에서 전달이 이루어진다.
  • 단방향 통신이므로 입력 스트림과 출력스트림을 별도로 사용해야하며 FIFO(First In Fires Out) 선입선출 구조이다.
  • 연속된 데이터의 흐름으로 입출력 진행 시 다른 작업을 할 수 없는 상태가 된다.
  • 입출력 대상을 변경하기 편하며 동일한 프로그램 구조를 유지할 수 있다.

 

입출력 스트림의 종류

IO(input/output) 입출력 바이트 기반 스트림 byte단위로 파일을 읽고 출력할 때 사용된다.
모든 타입의 데이터가 가능하다.
InputStream / OutputStream
문자 기반 스트림 문자 단위로 파일을 읽고 출력할 때 사용된다.
문자 데이터만 가능하다.
Reader / Writer

 

 

바이트 기반 스트림

InputStream FileInputStream -
FilterInputStream DataInputStream
BufferedInputStream
ByteArrayInputStream -
ObjectInputStream -
OutputStream FileOutputStream -
FilterOutputStream DataOutputStream
BufferedOutputStream
ByteArrayOutputStream -
ObjectOutputStream -

 

바이트 기반 입력 스트림 메서드

int read() 문자를 1byte씩 읽고 반환, 더 이상 읽을 문자가 없으면 -1을 반환한다.
int read(byte[] b) 배열에 읽은 문자를 저장하고 읽은 수만큼 반환, 더 이상 읽을 문자가 없으면 -1을 반환한다.
int read(byte[] b, int offset, int len) 배열에 정해진 범위만큼 읽어서 저장하고, offset은 시작위치, len은 길이이다.
int available() 스트림으로부터 읽어올 수 있는 데이터 크기를 반환한다.
close() 스트림 사용을 종료하고 자원을 반환한다.

 

바이트 기반 출력 스트림 메서드

int write(int b) 1byte 출력한다.
int write(byte[] b) 배열의 모든 바이트를 출력한다.
int write(byte[] b. int offset, int len) 배열의 정해진 범위만큼 읽어서 출력하고, offset은 시작위치, len은 길이이다.
void flush() 출력 버퍼에 잔류하는 모든 내용을 출력한다.
close() 스트림 사용을 종료하고 자원을 반환한다.

 

 

 

 

문자 기반 스트림

Reader BufferedReader  
CharArrayReader  
InputStreamReader FileReader
StringReader  
Writer BufferedWriter  
CharArrayWriter  
InputStreamWriter FileWriter
StringWriter  

 

문자 기반 입력 스트림 메서드

int read() 1개의 문자를 읽고 반환, 더 이상 읽을 문자가 없으면 -1을 반환한다.
int read(char[] cbuf) 배열에 읽은 문자를 저장하고 읽은 수만큼 반환, 더 이상 읽을 문자가 없으면 -1을 반환한다.
int read(char[] cbuf, int offset, int len) 배열에 정해진 범위만큼 읽어서 저장하고, offset은 시작위치, len은 길이이다.
close() 스트림 사용을 종료하고 자원을 반환한다.

 

문자 기반 출력 스트림 메서드

int write(char c) 단일 문자를 출력한다.
int write(char[] cbuf) 배열의 모든 문자를 출력한다.
int write(String str) 문자열을 출력한다.
int write(char[] cbuf. int offset, int len) 배열의 정해진 범위만큼 읽어서 출력하고, offset은 시작위치, len은 길이이다.
void flush() 출력 버퍼에 잔류하는 모든 내용을 출력한다.
close() 스트림 사용을 종료하고 자원을 반환한다.

 

 

보조 스트림

기반 스트림 대상에 직접 자료를 읽고 쓰는 스트림이다.
보조 스트림 직접 읽고 쓰는 기능 없이 기반 스트림에 추가로 사용할 수 있는 스트림이다.

 

입출력에서 버퍼라는 메모리를 활용해 작업하면 실행 성능을 향상시킬 수 있는데, 버퍼는 크기가 작아 많은 양의 데이터를 처리하기에는 부족하다. 이때 보조스트림 중 Buffered가 붙은 스트림을 활용하여 메모리 버퍼를 추가해 스트림 성능을 향상시켜줄 수 있다.

바이트 기반 : BufferedInputStream, BufferedOutputStream
문자 기반 : BufferedWriter, BufferedReader
*기존의 IO스트림은 바로 데이터를 전송했지만, 해당 보조스트림은 버퍼에 데이터를 저장해 한 번에 전송한다.

 

 

File 클래스 메서드

boolean delete() 파일 또는 폴더 삭제(성공시 true반환)
boolean createNewFile() 새로운 파일이나 내용이 없는 파일 생성
boolean mkdir() 경로에 계층이 여러 개 있어도 최상위 경로의 폴더만 생성
boolean mkdirs() 경로 상의 필요한 모든 폴더 생성
boolean exists() 폴더 또는 파일의 존재 여부 반환
boolean isFile() 파일 여부 반환
boolean isDirectory() 폴더 여부 반환
long length() 파일 크기 반환
boolean canWrite() 쓰기 가능한 파일 여부 반환
boolean canRead() 읽기 가능한 파일 여부 반환
String getPath() 상대 경로 반환
String getAbsolutePath() 절대 경로 반환

 

 

직렬화 / 역직렬화

직렬화란 자바 시스템 내부에서 사용하는 객체나 데이터를 외부의 시스템이 사용할 수 있도록 바이트 단위의 데이터로 변환하는 기술이다. 즉, 클래스 형태의 데이터를 바이트 단위로 변환한다.

이렇게 바이트 단위로 변환된 데이터를 다시 객체 형태로 변환하는 것을 역직렬화라고 한다.

'JAVA' 카테고리의 다른 글

[JAVA] StringBuilder  (0) 2024.09.10
[JAVA] POJO  (0) 2024.08.21
[JAVA] 스레드 Thread  (0) 2024.07.28
[JAVA] 람다식 (익명 메서드) (+함수형 인터페이스)  (0) 2024.07.27
[JAVA] 사용자 정의 예외  (0) 2024.07.25