JAVA/교재

JAVA 19 - 파일 입출력

record2080 2025. 1. 26. 23:57

01. 자바 입출력과 스트림

02. 입출력 스트림의 종류

03. 바이트 기반 스트림

04. 문자 기반 스트림

05. 보조 스트림

06. File 클래스

07. 직렬화

 

<자바 입출력과 스트림>

프로그램은 데이터를 외부에서 입력받아 처리하고 출력하는 구조

들어오는 모든 값 = input

출력되는 값 = output

=> 이런 입출력을 처리하기 위해 자바는 별도의 I/O 패키지를 제공함.

=> 이렇게 자바 프로그래밍이 디스크에 접근해 데이터를 주고받는 작업을 도와주는 통로를

"스트림" 또는 "가상통로"라 한다

 

 자바 입출력 스트림의 주요 특징
- 스트림은 입출력 장치와 자바 프로그램 간의 연결 통로로 스트림의 양 끝에서 전달이 이루어진다.
- 단방향 통신으로 입력스트림과 출력스트림을 별도로 사용하며 FIFO 구조를 이루고 있다.(큐)
-연속형 데이터 흐름으로 입출력 진행 시 다른 작업을 할 수 없는 상태가 됨
-입출력 대상을 변경하기 편하며, 동일한 프로그램 구조를 유지할 수 있음

 

<입출력 스트림의 종류>

바이트 기반 스트림 문자(char) 기반 스트림
-바이트 단위로 파일을 읽고 출력할 떄 사용
-모든 타입 데이터 가능
-문자 단위로 파일을 읽고 출력할 때 사용
-문자 데이터만 가능

 

<바이트 입력 스트림>

 

< InputStream의 주요 메서드>

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

주의) 바이트 기반으로 한글을 읽는다면 read(byte [] buffer) 메서드를 사용해야 한다.

 

 

-FileInputStream : 파일에서 바이트 단위로 자료를 읽어 들일 떄 사용하는 스트림

new FileInputStream(경로/ 파일명);

 

<바이트 출력 스트림>

 

메서드 설명
int write(int b) 1바이트 출력
int write(byte[] b) 매개변수로 주어진 배열의 모든 바이트 출력
int write(byte[] b, int offset, int len) 매개변수로 주어진 배열에 정해진 범위만큼 읽어서 출력
시작위치(offset),  길이(len)
void flush() 출력 버퍼에 잔류하는 모든 내용 출력
close()  스트림 사용을 종료하고 자원 반환

 

-FileOutStream 

new FileOutStream(경로/파일명, 이어쓰기 옵션);

이어쓰기 옵션) true면, 기존파일에 이어서 내용을 추가, false면 기존내용무시 새로씀 (디폴트는 F)

 

<문자 기반 스트림>

: 문자를 처리하는 char형의 크기는 2바이트로 별도의 처리를 하지 않으면 정상적으로 읽지 못하는 경우가 있음

이때 문자기반 스트림을 사용하면 간단하게 문자를 처리할 수 있음

 

<문자 입력 스트림>

메서드 설명
int read() 1개의 문자를 읽고 반환
더 이상 읽을 문자가 없으면 -1을 반환
int read(char[] cbuf) 매개변수로 주어진 배열에 읽은 문자를 저장하고 읽은 수만큼 반환
더 이상 읽을 문자가 없으면 -1을 반환
int read(char[] cbuf, int offset, int len)  매개변수로 주어진 배열에 정해진 범위만큼 읽어서 저장
close() 스트림 사용을 종료하고 자원을 반환

 

<문자 출력 스트림>

메서드 설명
int write(char[])  단일 문자 출력
int write(char[])  매개변수로 주어진 배열의 모든 문자 출력
int write(String)  문자열을 매개변수로 주어진 문자열 출력
int write(char[], int offset, int len)  매개변수로 주어진 배열에 정해진 범위만큼 읽어서 출력
void flush()  출력 버퍼에 잔류하는 모든 내용을 출력
close()  스트림 사용을 종료하고 자원 반환

 

<보조 스트림>

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

 

-보조스트림 연결하기

보조 스트림 변수명 = new 보조 스트림 (기반 스트림);

 

-성능향상 보조 스트림

- 바이트 기반 스트림 : BufferedInputStream과 BufferedOutputStream
- 문자기반 스트림 : BufferedReader와 BufferedWriter

 

<File클래스> 

: 자바 패키지에서 제공하는 파일클래스는 파일 및 폴더에 대한 경로명, 파일크기, 타입, 날짜 등의 속정 정보를 제공하며, 파일 생성, 삭제, 이름 변경 등의 파일관리 작업을 지원하기 위한 메서드로 구성되어 있음.

 

<파일클래스의 대표메서드>

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

 

<직렬화>

■ 직렬화 - 자바 시스템 내부에서 사용하는 객체나 데이터를 외부의 시스템에서 사용할 수 있도록 바이트 단위의 데이터로 변환시키는 기술

즉, 클래스 형태의 데이터를 바이트 단위로 변환

■ 역직렬화 - 바이트 단위로 변환된 데이터를 다시 객체 형태로 변환하는 것

 

 

'JAVA > 교재' 카테고리의 다른 글

오라클로 배우는 데이터베이스 입문 01-2. 데이터모델  (0) 2025.03.14
JAVA 18 - 스레드  (0) 2025.01.25
JAVA 17 - 람다식  (0) 2025.01.24
JAVA 16 - 컬렉션 프레임워크  (0) 2025.01.23
JAVA 15- 기본 API 클래스  (1) 2025.01.22