가자미의 개발이야기
[자바] 필터 스트림 본문
입력 스트림은 데이터를 바이트 단위로 입출력 한다.
만약 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();
}
}
}
'Java > 자바 기본 문법' 카테고리의 다른 글
[자바]I/O 스트림 기반의 인스턴스 저장 (0) | 2021.02.28 |
---|---|
[자바] 문자 스트림 (0) | 2021.02.26 |
[자바] I/O 스트림 (0) | 2021.02.26 |
[자바] 시각과 날짜 관련 코드 (0) | 2021.02.19 |
[자바] 스트림 활용 메소드 (0) | 2021.02.17 |