Java/자바 기본 문법
[자바] 필터 스트림
가자미
2021. 2. 26. 13:20
입력 스트림은 데이터를 바이트 단위로 입출력 한다.
만약 int형 데이터를 읽어와도 바이트형으로 받아진다.
프로그램에서 int형으로 사용하려면 필터 스트림이 필요하다.
InputStream in = new FileInputStream("data.dat"); // 입력 스트림 생성
DataInputStream fIn = new DataInputStream(in); // 필터 스트림 생성 및 연결
OutputStream out = new FileOutputStream("data.dat"); //출력 스트림 생성
DataOutputStream fOut = new DataOutputStream(out); //필터 스트림 생성 및 연결
필터 스트림을 close하면 기본 스트림도 자연스럽게 닫힌다.
입출력 필터 스트림의 예
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class StreamPtc {
public static void main(String[] args) {
try(DataOutputStream out = new DataOutputStream(new FileOutputStream("data.dat"))){
out.writeInt(370);//int형 데이터 저장
out.writeDouble(3.14);//double형 데이터 저장
}
catch(IOException e) {
e.printStackTrace();
}
}
}
class DataFileterInputStream{
public static void main(String[] args) {
try(DataInputStream in=new DataInputStream(new FileInputStrea("data.dat"))){
int num1=in.readInt();
double num2 = in.readDouble();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
버퍼링 기능을 제공하는 필터 스트림
class BufferedStreamFileCopier{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("대상 파일 : ");
String src = sc.nextLine();
System.out.print("사본 이름 : ");
String dst = sc.nextLine();
try(BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dst))) {
int data;
while(true) {
data=in.read();//바이트씩 복사해도 버퍼링되므로 속도가 빠름
if(data==-1)
break;
out.write(data);
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}
#더 알아보기# 출력 스트림 대상의 flush()메소드. 즉시 버퍼에 있는 데이터를 출력시킴
버퍼링과 필터 스트림을 모두 쓰고 싶을 경우(필터-버퍼링-입출력스트림 순으로 만들자)
class BufferedDataOutputStream{
public static void main(String[] args) {
try(DataOutputStream out=
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("data.dat")))){
out.writeInt(370);
out.writeDouble(3.15);
}
catch(IOException e) {
e.printStackTrace();
}
}
}