JAVA의 입출력, 바이트 스트림(ByteStream)
바이트 스트림
■ 바이트 스트림
✓ 바이트 단위의 입출력
✓ OutputStream 클래스와 InputStream 클래스
- 바이트 스트림의 입출력에 필요로 되는 다양한 메서드를 제공하는 추상 클래스
- OutputStream 클래스의 주요 메서드
메서드 | 설명 |
void close() | 출력 스트림을 닫기 |
void flush() | 버퍼에 남아있는 출력 스트림을 출력 |
void write(int i) | 정수 i의 하위 비트 8비트를 출력 |
void write(byte buffer[]) | buffer 내용을 출력 |
void write(byte buffer[], int index, int size) | buffer의 index부터 size 만큼의 바이트를 출력 |
-InputStream 클래스의 주요 메서드
메서드 | 설명 |
int available() | 현재 읽기 가능한 바이트 수를 반환 |
void close() | 입력 스트림을 닫기 |
int read() | 한 바이트를 읽어 int 형으로 반환, 더 이상 읽을 값이 없다면 -1을 반환 |
int read(byte buffer[]) | buffer의 크기만큼 읽어 buffer에 저장하고 읽은 바이트 수를 반환 |
int read(byte buffer[], int offset, int numBytes) | numbytes 만큼을 읽어 buffer의 offset 위치에 저장하고 읽은 바이트 수를 반환 |
int skip(long numBytes) | numBytes로 지정된 바이트를 건너뛰고 건너 뛴 바이트 수를 반환 |
void mark(int numBytes) | 입력 스트림의 현재 위치를 마크 |
boolean markSupported() | mark()와 reset()를 지원하면 true를 반환 |
void reset() | 입력 시작 부분을 현재의 위치에서 가장 가까운 이전의 마크 위치로 설정 |
■ FileInputStream과 FileOutputStream
✓ 파일이 입출력 대상
-FileOutputStream 클래스 생성자와 주요 메서드
생성자 | 설명 |
FileOutputStream(File file) | file이 지정하는 파일에 출력하는 FileOutputStream 생성 |
FileOutputStream(String name) | name이 지정하는 파일에 출력하는 FileOutputStream 생성 |
FileOutputStream(File file, boolean append) | FileOutputStream을 생성하며 append가 true이면 file이 지정하는 파일의 마지막부터 데이터 저장 |
FileOutputStream (String name, boolean append) | FileOutputStream을 생성하며 append가 true이면 name 이름의 파일의 마지막부터 데이터 저장 |
메서드 | 설명 |
void write(int b) | int형으로 넘겨진 한 바이트를 출력 스트림으로 출력 |
void write(byte[] b) | 배열 b의 바이트를 모두 출력 스트림으로 출력 |
void write(byte[] b, int off, int len) | len 크기만큼 off부터 배열 b를 출력 스트림으로 출력 |
void flush() | 출력 스트림에서 남아 있는 데이터 모두 출력 |
void close() | 출력 스트림을 닫고 관련된 시스템 자원 해제 |
- FileInputStream 클래스 클래스 생성자와 주요 메서드
생성자 | 메서드 |
FileInputStream(File file) | file이 지정하는 파일로부터 읽는 FileInputStream 생성 |
FileInputStream(String name) | name이 지정하는 파일로부터 읽는 FileInputStream 생성 |
메서드 | 설명 |
int read() | 입력 스트림에서 한 바이트를 읽어 int 형으로 리턴 |
int read(byte[] b) | 최대 배열 b의 크기만큼 바이트를 읽음, 읽는 도중 EOF를 만나면 실제 읽은 바이트 수 리턴 |
int read(byte[] b, int off, int len) | 최대 len개의 바이트를 읽어 b 배열의 off 위치에 저장, 읽는 도중 EOF를 만나면 실제 읽은 바이트 수 리턴 |
int available() | 입력 스트림에서 현재 읽을 수 있는 바이트 수 리턴 |
void close() | 입력 스트림을 닫고 관련된 시스템 자원 해제 |
■ 바이트 스트림으로 바이너리 파일 쓰기
✓ 바이너리 값을 파일에 저장하기
- 프로그램 내의 변수, 배열, 버퍼에 있는 바이너리 값을 파일에 그대로 기록
1. 파일 출력 스트림 생성(파일 열기) // 스트림을 생성하고 파일을 열어 스트림과 연결
ex) FileOutputStream fout = new FileOutputStream("파일경로")
2. 파일 쓰기 // write()로 문자 하나 씩 파일에 기록
3. 스트림 닫기 // close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package practice;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamEx {
public FileOutputStreamEx() {
byte b[] = {7, 51, 3, 4, -1, 24};
try {
FileOutputStream fout = new FileOutputStream("파일경로");
for(int i=0; i<b.length; i++) // 배열 b의 수를 바이너리 그대로 기록
fout.write(b[i]);
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new FileOutputStreamEx();
}
}
|
cs |
■ 바이트 스트림으로 바이너리 파일 읽기
✓ 바이너리 파일에서 읽기 위해 FileInputStream 클래스 이용
1. 파일 입력 스트림 생성(파일 열기) // 스트림을 생성하고 파일을 열어 스트림과 연결
ex) FileInputStream fin = new FileInputStream("파일경로");
2. 파일 읽기 // read()로 문자 하나 씩 파일에서 읽기, 블록 단위로 읽기 가능
3. 스트림 닫기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package practice;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamEx {
public FileInputStreamEx() {
byte b[] = new byte[6];
try {
FileInputStream fin = new FileInputStream("파일경로");
int n=0, c;
while((c=fin.read()) != -1 ) {
b[n] = (byte)c; //읽은 바이트를 배열에 저장
n++;
}
// 배열 b의 바이트 값을 모두 화면에 출력
for(int i=0; i<b.length; i++)
System.out.print(b[i] + " ");
fin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new FileInputStreamEx();
}
}
|
cs |
■ FilterOutputStream 클래스와 FilterInputStream 클래스
✓ 일반적으로 필터를 사용하기 위해서 사용
□ FilterOutputStream 클래스
- OutputStream 클래스로부터 상속된 클래스
- 필터를 사용하여 원하는 정보만 출력시켜주는 기능을 제공
- FilterOutputStream(OutputStream outputStream)
□ FilterInputStream 클래스
- InputStream 클래스로부터 상속된 클래스
- 필터를 사용하여 원하는 정보만 입력할 수 있는 기능을 제공
- FileInputStream(InputStream inputStream)
■ BufferedOutputStream 클래스와 BufferedInputStream 클래스
✓ FilterOutputStream, FilterInputStream 클래스로부터 상속
□ BufferedOutputStream 클래스
- 버퍼를 사용하여 스트림을 출력
- 생성자
. BufferedOutputStream(OutputStream outputStream)
. BufferedOutputStream(OutputStream outputStream, int buffSize)
□ BufferedInputStream 클래스
- 버퍼를 사용하여 스트림을 입력
- 생성자
. BufferedInputStream(InputStream inputStream)
. BufferedInputStream(InputStream inputStream, int bufSize)
■ DataOutputStream 클래스와 DataInputStream 클래스
✓ 자바의 기본 자료형 데이터를 바이트 스트림으로 출력하는 클래스
□ DataOutputStream 클래스
- FilterOutputStream 클래스로부터 상속되었다
- DataOutput 인터페이스를 사용한 클래스
- 기본 자료형 데이터를 바이트 스트림으로 출력
. DataOutputStream(OutputStream outputStream)
- readByte(), readInt(), readDouble()과 같은 메서드 제공
□ DataInputStream 클래스
- FilterInputStream 클래스로부터 상속되었다
- DataInput 인터페이스를 사용한 클래스
- 바이트 스트림으로부터 자바의 기본 자료형 데이터를 입력
. DataInputStream(InputStream inputStream)
- writeByte(int v), writeInt(int v), writeDouble(double v)과 같은 메서드 제공
■ PrintStream 클래스
✓ FilterOutputStream 클래스로부터 상속된 클래스
✓ 모든 형식의 데이터를 출력하는 기능을 제공
✓ System.out.println문장의 System.out(클래스 변수)은 항상 PrintStream 클래스로부터 생성된 객체를 참조한다.
'Language > JAVA' 카테고리의 다른 글
[JAVA] JAVA 람다식을 활용한 예제 (1) | Yoon's Dev (0) | 2021.05.08 |
---|---|
[JAVA] 문자(Text) 스트림, 버퍼(Buffer) 스트림, File 클래스 | Yoon's Dev (0) | 2021.04.26 |
[JAVA] JAVA의 입출력 스트림(Stream) | Yoon's Dev (0) | 2021.04.23 |
[JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제 | Yoon's Dev (1) | 2021.04.21 |
[JAVA] JAVA의 5가지 리스너 이벤트 처리 방법 (독립, 내부, 프레임, 익명, 람다식) | Yoon's Dev (0) | 2021.04.20 |