입출력 스트림의 종류
- java.io 패키지에는 여러 가지 종류의 스트림 클래스를 제공하고 있습니다.
- 스트림 클래스는 크게 바이트 기반 스트림, 문자 기반 스트림으로 구분됩니다.
- 바이트 기반 스트림은 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용합니다.
- 문자 기반 스트림은 문자 데이터를 읽고 출력할때 사용합니다.
구분 | 바이트 기반 스트림 | 문자 기반 스트림 | ||
입력 스트림 | 출력 스트림 | 입력 스트림 | 출력 스트림 | |
최상위 클래스 | InputStream | OutputStream | Reader | Writer |
하위 클래스 | XXXInputStream | XXXOutputStream | XXXReader | XXXWriter |
바이트 출력 스트림
- OutputStream은 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스입니다.
- 모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스를 상속받아서 만들어집니다.
- 아래는 주요 메소드들입니다.
리턴 타입 | 메소드 | 설명 |
void | write(int b) | 1byte를 출력합니다 |
void | write(byte[] b) | 매개값으로 주어진 배열 b의 모든 바이트를 출력합니다. |
void | write(byte[] b,int off, int len) | 매개값으로 주어진 배열 b[off]부터 len개까지의 바이트를 출력합니다. |
void | flush() | 출력 버퍼에 잔류하는 모든 바이트를 출력합니다. |
void | close() | 출력 스트림을 닫습니다. |
write(int b)메소드
- 매개변수로 주어지는 int(4byte)에서 끝 1byte만 출력 스트림으로 보냅니다.
코드 설명)
- 11,22,33이 저장된 각각의 바이트를 출력해서 testresult.db의 내용으로 저장하는 것입니다.
- FileOutputStream은 자식 클래스이므로 자동 변환됩니다.
- flush 메소드는 이 내부 버퍼에 잔류된 바이트를 모두 출력합니다.
- OutputStream을 더 이상 사용하지 않겠다는 의미로 os.close를 사용합니다.
package sec18.exam01;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WriteExample {
public static void main(String[] args) throws Exception {
OutputStream os = new FileOutputStream("저장위치/testresult.db");
byte a = 11;
byte b = 22;
byte c = 33;
os.write(a);
os.write(b);
os.write(c);
os.flush();
os.close();
}
}
write(byte [] b) 메소드 와 write(byte[] b,int off, int len) 메소드
- write(byte[] b) 메소드는 매개값으로 주어진 배열의 모든 바이트를 출력 스트림으로 보냅니다.
- write(byte[] b,int off, int len) 메소드는 b[off]부터 len개의 바이트 출력 스트림으로 보냅니다.
package sec18.exam01;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WriteExample {
public static void main(String[] args) throws Exception {
OutputStream os = new FileOutputStream("저장위치/testresult2.db");
byte[] array = {11,22,33};
//배열의 모든 바이트 출력
os.write(array);
// 배열의 1번 인덱스부터 3개 출력
// os.write(array, 1, 3)
os.flush();
os.close();
}
}
바이트 입력 스트림
- InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스입니다.
- 모든 바이트 기반 입력스트림은 InputStream 클래스를 상속받아서 만들어집니다.
- 아래는 주요 메소드들입니다.
리턴 타입 | 메소드 | 설명 |
int | read() | 1byte를 읽고 읽은 바이트를 리턴합니다. |
int | read(byte[] b) | 읽은 바이트를 매개값으로 주어진 배열에 저장하고 읽은 바이트수를 리턴합니다. |
int | read(byte[]b, int off, int len) | len개의 바이트를 읽고 매개값으로 주어진 배열에서 b[off]부터 len개까지 저장합니다. |
void | close() | 입력 스트림을 닫습니다. |
read() 메소드
- read() 메소드는 입력 스트림으로 부터 1byte를 읽고 int(4byte) 타입으로 리턴합니다.
- 리턴된 3byte 중 끝 1byte에만 데이터가 들어갑니다.
package sec18.exam01;
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExample {
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("저장위치/testresult2.db");
while(true) {
//1byte씩 읽기
int data = is.read();
//파일 끝에 도달했을 경우
if(data == -1) break;
System.out.println(data);
}
is.close();
}
}
read(byte[]b, int off, int len) 메소드
- read(byte[]b, int off, int len) 메소드는 입력 스트림으로부터 len개의 바이트만큼 읽고
매개값으로 주어진 바이트 배열 b[off]부터 len개 까지 저장합니다 - 실제로 읽은 바이트 수가 len개보다 작을 경우에는 읽은 수만큼 리턴합니다.
- read(byte[] b)와 차이점은 한 번에 읽어드리는 바이트 수를 len 매개값으로 조절할 수 있으며 배열에서
저장이 시작되는 인덱스를 지정할 수 있다는 점입니다.
package sec18.exam01;
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExample3 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InputStream is = new FileInputStream("저장 위치/testresult2.db");
byte[] buffer = new byte[5];
int readByteNum = is.read(buffer, 2, 3);
if(readByteNum != -1) {
for(int i=0; i<buffer.length; i++) {
System.out.println(buffer[i]);
}
}
is.close();
}
}
'학습단 > JAVA 학습단' 카테고리의 다른 글
23. 혼공자 23일차(보조 스트림) (0) | 2023.08.16 |
---|---|
22. 혼공자 22일차(입출력 스트림_2) (0) | 2023.08.15 |
5주차 완료 (0) | 2023.08.12 |
20. 혼공자 20일차(선입선출 ,후입선출 컬렉션) (0) | 2023.08.10 |
19. 혼공자 19일차(컬렉션 프레임 워크_3) (0) | 2023.08.09 |