프로그래밍 언어/JAVA(자바) 응용

65.여러가지 보조 스트림 클래스들

lroot 2022. 6. 6. 16:11
728x90
반응형

보조 스트림

- 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림

- FilterInputStream과 FilterOutputStream이 보조 스트림의 상위 클래스들

- 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 다른 보조 스트림)을 가짐

- Decorator Pattern으로 구현 됨

- 상위 클래스 생성자

생성자 설명
protected FilterInputStream과(InputStream in) 생성자의 매개변수로 InputStream을 받습니다.
public FilterOutputStream(OutputStream out) 생성자의 매개변수로 OutputStream을 받습니다.

 

InputStreamReader 와 OutputStreamWriter

- 바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림

- FileInputStream으로 읽은 자료를 문자로 변환해주는 예

- InputStreamReaderTest.java

public class InputStreamReaderTest {

public static void main(String[] args) {
int i;

try(InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))){

while((i = isr.read()) != -1) {
System.out.print((char)i);
}
}catch(IOException e) {
e.printStackTrace();
}

}

}

 

BufferedInputStream과 BufferedOutputStream

- 약 8k의 배열이 제공되어 입출력이 빠르게 하는 기능이 제공되는 보조 스트림

- BufferedReader와 BufferedWriter는 문자용 입출력 보조 스트림

- BufferedInputStream 과 BufferedOutputStream을 이용하여 파일 복사하는 예

- BufferedStreamTest.java

public class FileCopyTest {

public static void main(String[] args) {

long millisecond = 0;

try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.zip"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.zip"))){

millisecond = System.currentTimeMillis();

int i;
while((i = bis.read()) != -1 ) {
bos.write(i);
}

millisecond = System.currentTimeMillis() - millisecond;

}catch(IOException e) {
e.printStackTrace();
}
System.out.println(millisecond + " 소요되었습니다.");

}

}

 

DataInputStream과 DataOutputStream

- 자료가 메모리에 저장된 상태 그대로 읽거나 쓰는 스트림

- DataInputStream 메서드

메서드 설명
byte readByte() 1바이트를 읽어 반환합니다.
boolean readBoolean() 읽은 자료가 0이 아니면 true를, 0이면 false를 반환합니다.
char readChar() 한 문자를 읽어 반환합니다.
short readShort() 2바이트를 읽어 정수 값을 반환합니다.
int readInt() 4바이트를 읽어 정수 값을 반환합니다.
long readLong() 8바이트를 읽어 정수 값을 반환합니다.
float readFloat() 4바이트를 읽어 실수 값을 반환합니다.
double readDouble() 8바이트를 읽어 실수 값을 반환합니다.
String readUTF() 수정된 UTF-8 인코딩 기반으로 문자열을 읽어 반환합니다.

- DataOutputStream 메서드

메서드 설명
void writeByte(int v) 1바이트의 자료를 출력합니다.
void writeBoolean(boolean v) 1바이트 값을 출력합니다.
void writeChar(int v) 2바이트를 출력합니다.
void writeShort(int v) 2바이트를 출력합니다.
void writeInt(int v) 4바이트를 출력합니다.
void writeLong(ling v) 8바이트를 출력합니다.
void writeFloat(float v) 4바이트를 출력합니다.
void writeDouble(double v) 8바이트를 출력합니다.
void writeUTF(String str) 수정된 UTF-8 인코딩 기반으로 문자열을 출력합니다.

- DataStreamTest.java

public class DataStreamTest {

public static void main(String[] args) {

try(FileOutputStream fos = new FileOutputStream("data.txt");
DataOutputStream dos = new DataOutputStream(fos))
{
dos.writeByte(100);
dos.writeChar('A');
dos.writeInt(10);
dos.writeFloat(3.14f);
dos.writeUTF("Test");

}catch(IOException e) {
e.printStackTrace();
}

try(FileInputStream fis = new FileInputStream("data.txt");
DataInputStream dis = new DataInputStream(fis))
{
System.out.println(dis.readByte());
System.out.println(dis.readChar());
System.out.println(dis.readInt());
System.out.println(dis.readFloat());
System.out.println(dis.readUTF());
}catch(IOException e) {
e.printStackTrace();
}

}

}