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을 사용하기 위해서 객체 직렬화 되어 있어야 함
★ 위의 클래스들은 파일과의 연결을 닫는 작업이 필요함

위의 클래스의 경우에는 생성된 객체를 역순으로 닫아줘야 함!!!
'JAVA_이클립스' 카테고리의 다른 글
| JAVA - I/O (Input/Output) File 클래스 (0) | 2023.02.23 |
|---|---|
| JAVA - Scanner 클래스/Random 클래스 (0) | 2023.02.23 |
| JAVA - Date Class/ Calendar 클래스(feat.관련 메서드) (0) | 2023.02.23 |
| JAVA - Stack Class/ ArrayList Class/ Vecotr Class/ HashSet Class/ HashMap Class/ Queue (0) | 2023.02.18 |
| JAVA - Object 클래스 (0) | 2023.02.18 |