보조스트림
- 보조스트림이란 다른 스트림과 연결이 되어 여러 가지 편리한 기능을 제공해주는 스트림을 말합니다.
- 보조 스트림은 자체적으로 입출력을 수행할 수 없습니다.
- 보조 스트림은 문자 변환, 입출력 성능 향상, 기본타입 입출력등의 기능을 제공합니다.
- 아래는 입력 스트림과 출력 스트림에 보조 스트림을 연결한 모습을 가상화한것 입니다.
보조 스트림 연결하기
- 보조 스트림을 연결하려면 보조 스트림을 생성할 때
자신이 연결될 스트림을 다음과 같이 생성자의 매개값으로 제공하면 됩니다.
보조스트림 변수 = new 보조스트림(연결스트림)
예시)
InputStream을 문자 변환 보조 스트림인 InputStreamReader에 연결하는 코드
InputStream is =...;
InputStreamReader reader = new InputStreamReader(is);
문자 변환 보조 스트림
- 소스 스트림이 바이트 기반 스트림이라면서 입출력 데이터가 문자라면
Reader와 Writer로 변환해서 사용하는것을 고려할수 있습니다.
OutputStreamWriter
- OutputStreamWriter는 바이트 기반 출력 스트림에 연결되어 문자 출력 스트림인
Writer로 변환 하는 보조 스트림입니다.
Writer writer = new OuetputStreamWriter(바이트 기반 출력 스트림);
InputStreamReader
- InputStreamReader는 바이트 기반 입력 스트림에 연결되어 문자 입력 스트림인
Reader로 변환 하는 보조 스트림입니다.
Reader reader = new InputStreamReader(바이트 기반 입력 스트림);
성능향상 보조스트림
- 프로그램이 입출력소스와 직접 작업하지 않고 중간에 메모리 버퍼와 작업함으로 써
실행 성능을 향상시킬 수 있습니다. - 예시로 프로그램이 직접 하드에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로 쓰기속도가 향상됩니다.
BufferedOutputStream과 BufferedWriter
- BufferedOutputStream은 바이트 기반 출력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림입니다.
- BufferedWriter는 문자 기반 출력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림입니다.
- BufferedOutputStream과 BufferedWriter는 프로그램에서 전송한 데이터를 내부 버퍼에 쌓아 두었다가
버퍼가 꽉차면, 버퍼의 모든 데이터를 한꺼번에 보냅니다. - 프로그램 입장에서 보면 메모리버퍼로 데이터를 고속 전송하기 때문에 출력 성능이
향상되는 효과를 얻게 됩니다.
BufferedOutputStream bos = new BufferedOutputStream(바이트 기반 출력 스트림);
BufferedWriter bw = new BufferedWriter(문자 기반 출력 스트림);
BufferedInputStream과 BufferedReader
- BufferedInputStream은 바이트 기반 입력 스트림에 연결되어 버퍼를 제공해주는 보조스트림입니다.
- BufferedReader는 문자 기반 입력 스트림에 연결되어 버퍼에 제공해주는 보조 스트림입니다.
- 두개 모두 입력소스로 부터 자신의 내부 버퍼 크기만큼 데이터를 미리 읽고 버퍼에 저장해둡니다.
- BufferedReader는 라인 단위로 문자열을 익는 매우 편리한 readLine()메소드를 제공합니다.
BufferedInputStream bis = new BufferedInputStream(바이트 기반 입력 스트림);
BufferedReader br = new BufferedReader(문자 기반 입력 스트림);
예시)
라인 단위로 문자열 읽기
package sec20.exam01;
import java.io.*;
public class ReadLine {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Reader reader = new FileReader(
ReadLine.class.getResource("language.txt").getPath()
);
BufferedReader br = new BufferedReader(reader);
while(true) {
String data = br.readLine();
if(data == null) break;
System.out.println(data);
}
br.close();
}
}
기본 타입 입출력 보조 스트림
- DataInputStream과 DataOutputStream 보조 스트림을 연결하면
기본 타입인 boolean,char,shor,int,long,float,double을 입출력할수 있습니다. - 아래 코드는 DataInputStream과 DataOutputStream 객체를 생성하는 코드 입니다.
DataInputStream dis = new DataInputStream(바이트 기반 입력 스트림);
DataOutputStream dos = new DataOutputStream(바이트 기반 출력 스트림);
예시)
이름 등급 순위 순으로 파일에 출력하고 다시 파일로부터 입력받는 코드
package sec20.exam01;
import java.io.*;
public class DataInputOutputStreamExample {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FileOutputStream fos = new FileOutputStream("저장위치/test.db");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF("아이언맨");
dos.writeUTF("A+");
dos.writeInt(1);
dos.writeUTF("토르");
dos.writeUTF("A+");
dos.writeInt(2);
dos.flush(); dos.close(); fos.close();
FileInputStream fis = new FileInputStream("저장위치/test.db");
DataInputStream dis = new DataInputStream(fis);
for(int i=0; i<2; i++) {
String name = dis.readUTF();
String score = dis.readUTF();
int order = dis.readInt();
System.out.println(name + " : " + score + " : " + order);
}
dis.close(); fis.close();
}
}
프린터 보조 스트림
- PrintStream과 PrintWriter는 프린터와 유사하게 출력하는 print(),println() 메소드를
가지고 있는 보조 스트림입니다. - PrintStream과 PrintWriter는 다른 보조 스트림과 마찬가지로 연결할 출력 스트림을
생성자의 매개값으로 받습니다.
PrintStream ps = new PrintStream(바이트 기반 출력 스트림);
PrintWriter pw = new PrinterWriter(문자 기반 출력 스트림);
PrinterStream / PrinterWriter | |||
void | print(boolean b) | void | println(boolean b) |
void | print(char c) | void | println(char c) |
void | print(double d) | void | println(double d) |
void | print(float f) | void | println(float f) |
void | print(int i) | void | println(int i) |
void | print(long l) | void | println(long l) |
void | print(Object obj) | void | println(Object obj) |
void | print(String s) | void | println(String s) |
void | println() |
예시) 라인단위로 출력하는 코드 입니다.
package sec20.exam01;
import java.io.*;
public class PrintStreamExample {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("저장위치/print.txt");
PrintStream ps = new PrintStream(fos);
ps.println("프린터에서");
ps.print("출력하는 것처럼");
ps.println("보입니다.");
ps.flush();
ps.close();
}
}
객체 입출력 보조 스트림
- ObjectOutputStream과 ObjectInputStream 보조 스트림을 연결하면 메모밀에 생성된
객체 파일 또는 네트워크로 출력할수 있습니다. - ObjectOutputStream은 객체를 직렬화 하는 역할을 합니다.
- ObjectInputStream은 객체로 역직렬화 하는 역할을 합니다.
ObjectInputStream ois = new ObjectInputStream(바이트 기반 입력 스트림);
ObjectOutputStream oos = new ObjectOutputStream(바이트 기반 출력 스트림);
'학습단 > JAVA 학습단' 카테고리의 다른 글
6주차 완료 (0) | 2023.08.17 |
---|---|
24. 혼공자 24일차(입출력 관련 API) (0) | 2023.08.17 |
22. 혼공자 22일차(입출력 스트림_2) (0) | 2023.08.15 |
21. 혼공자 21일차(입출력 스트림) (0) | 2023.08.14 |
5주차 완료 (0) | 2023.08.12 |