본문 바로가기

JAVA_이클립스

JAVA - InputStream/ OutputStream/ FileInputStream/ FileOutputStream /BufferedInputStream / BufferedOutputStream/ FileReader/ FileWriter/ ObjectInputStream/ ObjectOutputStream

Stream이란?

● 데이터의 흐름

● 단방향, FIFO(선입선출) 구조를 가지고 있음

● 데이터는 어떠한 통로를 통해 데이터가 이동되는데 그 통로가 바로 Stream

● 출력 단위에 따라 바이트 기반과 문자 단위로 분

 

위의 기능을 수행하기 위해  InputStream과 OutputStream이 존재(두 스트림은 단일 방향으로 연속적으로 흘러감)

 

InputStream(Input : 프로그램에 데이터가 들어오는 것)

● 바이트 기반 입력 스트림의 최상위 추상 클래스

● 모든 바이트 기반 입력 스트림은 InputStream 상속받음

● 파일 데이터를 읽거나 네트워크 소켓을 통해 데이터를 일걱나 키보드에서 입력한 데이터를 읽을 때 사용

 

InputStream 주요 메서드

메서드 내용
int available() 스트림에서 읽을 수 있는 바이트 개수 리턴
void close() 스트림 닫고 자원해제
abstract int read() 1바이트를 읽고, 읽은 바이트를 리턴
int read(byte[] b) 지정된 배열크기만큼 읽고 버퍼 배열에 저장, 읽은 개수 리턴
int read(byte[] b, int off, int len) ● 지정된 배열크기만큼 읽고 버퍼 배열에 저장, 읽은개수 리턴
● 읽을 바이트의 시작과 개수 지정 가능

 

OutputStream(Output : 프로그램의 데이터가 나가는 것)

● 바이트 기반 출력 스트림의 최상위 추상클래스

● 모든 바이트 기반 출력 스트림 클래스는 OutputStream클래스를 상속 받아 기능을 재정의

메서드 내용
void close() 스트림 닫고 지원해제
void flush() 버퍼를 비우기. 버퍼 내의 모든 데이터 출력
void write(byte[] b) 바이트 배열 출력
void write(byte[] b, int off, int len) 바이트 배열 출력(시작과 끝 설정)
abstract void write(int b) 바이트 1개 출력

 

 


FileInputStream

 

● 자바에서는 다양한 타입의 확장자를 가진 파일을 읽기 위해 FileInputStream 클래스 이용

● 파일에서 바이트 단위로 입력이 가능함

● 다른 입력클래스들과 연결해서 데이터를 읽을 수 있음

FileInputStream(File file) File 객체가 가리키는 파일을 바이트 스트림으로 읽기 위해 FileInputStream 객체 생성
FileInputStream(String s) 생성자에 담긴 파일의 주소를 찾아 바이트 스트림으로 읽기 위해 FileInputStream
객체 생성

 

FileOutputStream

FileOutputStream(File file) ● 주어진 파일 객체가 가리키는 파일을 쓰기 위한 객체 생성
● 기존의 파일이 존재할 때는 그 내용을 지우고
새로운 파일 생성
FileOutputStream(String fileName) 주어진 이름의 파일을 쓰기 위한 객체 생성
FileOutputStream(String fileName, boolean append) 주어진 appen 값에 따라 새로운 파이를 생성하거나
기존의 내용에 추가

 

BufferedInputStream / BufferedOutputStream

예제

● BufferedInputStream / BufferedOutputStream을 사용하면 편리하고 효율적인 입출력이 가능해짐.

BufferedInputStream(InputStream in) InputStream에 대한 BufferedInputStream 객체 생성
BufferedInputStream(InputStream in,
int size)
InputStream에 대한 BufferedInputStream 객체 생성 후 내부 버퍼의
크기를 Size값으로 설정
BufferedOutputStream(OutputStream Out) OutputStream에 대한 BufferedOutputStream 객체 생성
BufferedOutputStream(OutputStream Out, int size) OutputStream에 대한 BufferedOutputStream 객체 생성 후 내부 버퍼의 크기를 size 값으로 설정

 

 

 

FileReader

● character 파일을 읽을 수 있는 기능 제공

● 문자 단위로 데이터를 읽기 때문에 텍스트 파일만 읽을 수 있음

한 문자씩 읽기
한 줄씩 읽기

 

 

FileWriter

● 문자를 파일에 쓸 수 있는 기능 제공

● 텍스트 파일에 문자열 데이터를 쓰기 위해 사용

● 문자 데이터만 쓰기 때문에 텍스트 파일만 저장 가능

● 파일 경로에 해당 파일이 존재한다면 그 파일을 덮어쓰며 기존 데이터들은 사라짐

● 덮어쓰지 않고 파일의 뒤쪽에 붙여쓰고 싶은 경우 FileWriter 생성자의 2번째 인자로 true 값을 주면 

 

 

 

 

객체의 직렬화(Serializable)

직렬화란?

자바 시스템 내부에서 사용하는 객체나 데이터를 외부의 시스템에서 사용할 수 있도록 byte 단위의

데이터로 변환시키는 기술과 바이트로 변환된 데이터를 다시 객체로 변환

 

● JVM의 메모리에 힙 또는 스택되어있는 객체 데이털르 바이트 형태로 변환하는 기술과 직렬화된

바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태를 같이 이야기

 

● 직렬화를 통해 프로그램이 실행되는 동안 생성된 객체를 스트림을 이용해 지속적으로 보관하거나 전송 가능

 

 

ObjectInputStream / ObjectOutputStream

● 객체를 읽고 쓰는 클래스

● 각각 객체를 직렬화, 역직렬화하는 메소드 제공

● ObjectStream을 사용하기 위해서 객체 직렬화 되어 있어야 함

 

 

 

 

 

 

 

 

★ 위의 클래스들은 파일과의 연결을 닫는 작업이 필요함

위의 클래스의 경우에는 생성된 객체를 역순으로 닫아줘야 함!!!