1.보조 스트림
•
스트림의 기능을 향상 시키거나 새로운 기능을 추가하기 위해서 사용
•
보조 스트림은 실제 데이터를 주고 받는 스트림이 아니기 때문에 입출력 처리가 불가능
•
기반 스트림을 먼저 생성한 후 이를 이용하여 보조 스트림을 생성
•
보조스트림은 단독으로 사용불가
1-1.대표적 보조스트림의 종류는 ?
1. 입출력 성능→(BufferedInputStream, BufferOutputStream), 2. 기본데이터타입 출력→DataInputStream, DataOutputStream, 3. 객체 입출력(ObjectInputStream/ ObjectOutputStream)등의 기능을 제공하는 보조스트림 이 있다.
1-2. 메인스트림과 보조스트림 코드 예시
2. 필터스트림
2-1 필터스트림이란??
•
•
기본 스트림은 외부데이터에 직접 연결되는 스트림이고 필터 스트림은 외부데이터에 직접 연결하는 것이 아니라 기본 스트림에 추가로 사용할수 있는 스트림이다.
•
목적 : 주로 성능 향상을 목적으로 사용 되며 생성자를 보면 구분이 가능하다.
•
생성자쪽에서 매개변수로 다른 스트림을 이용하는 클래스를 필터스트림이라고 볼 수 있다.
package com.song.practice.io.filterStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Application1 {
public static void main(String[] args) {
/* 버퍼를 이용해서 성능을 향상시키는 보조스트림 */
BufferedWriter bw = null;
try {
bw = new BufferedWriter
(new FileWriter("src/com/song/practice/io/filterStream/testBuffered.txt"));
bw.write("안녕하세요\n");
bw.write("반갑습니다.\n");
// bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(bw != null) {
try {
bw.close();
} catch (IOException e) {
// TODO: handle exception
}
}
}
BufferedReader br = null;
try {
br = new BufferedReader
(new FileReader("src/com/song/practice/io/filterStream/testBuffered.txt"));
//readLine = 줄단위로 읽어서 반환타입을 문자열로 반환해준다
String temp;
while((temp = br.readLine()) != null ){
System.out.println(temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Java
복사
3. 형변환 보조 스트림
3-1 형변환 보조스트림이란??
•
기본스트림이 byte 기반 스트팀이고 , 보조스트림이 char기반 스트림경우 사용해서 두 개의 다른 문자열을 하나로 합칠 수 있게 도와준다.
3-2 표준 스트림이란 ?
•
자바에서는 콘솔이나 키보드 같은 표준 입력 장치로부터 데이터를 입출력하기위한 스트림을 표준스트림 형태로 제공하고 있다. System 클래스의 in, out, err가 대상 데이터의 스트림을 의미한다.
* System.in (inputStream) : 콘솔로부터 데이터를 입력 받는다.
* System.out (PrintWriter) : 콘솔로 데이터를 출력한다.
* System.err (PrintWriter) : 콘솔로 데이터를 출력한다.
* 즉 자주 사용되는 자원에 대해 미리 스트림을 생성해두었기 때문에 개발자가 별도로 스트림을 생성하지 않는다.
•
이런 표준 스트림 중 콘솔로부터 읽어오는 기반 스트림이 InputStream인데 Buffer를 이용해서 성능을 향상시키고 싶은 경우에 형변환 보조스트림을 사용할 수 있다.
•
예시(.readLine()은 한 줄을 읽어오는 메소드)
//BufferedStream은 char기반 스트림 , System.in은 byte기반 스트림
// 그래서 두개를 맞춰줄 inputStreamReader이 필요하다
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("문자열 입력 : ");
String value = br.readLine();
System.out.println("value : " + value);
System.out.println("숫자 입력 ");
int value2 = Integer.parseInt(br.readLine());
System.out.println("value2 = " + (value2 * value2));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
bw.write("java oracle Jdbc");
} catch (Exception e) {
// TODO: handle exception
} finally {
if(bw != null) {
try {
bw.close();
} catch (IOException e2) {
// TODO: handle exception
}
}
}
}
Java
복사
4. Data스트림
4-1 Data스트림이란?
외부 데이터로부터 읽어오는 데이터를 바이트형 정수, 문자, 문자열 로만 읽어오면 여러 데이터 타입을 취급하는경우 별도로 처리를 해주어야한다.
4-2 그래서??
자바에서는 데이터 자료형 별로 처리하는 기능을 추가한 보조스트림을 제공하고 있다.
* DataInputStream/DataOutputStream
4-3 코드 예시
package com.song.practice.io.filterStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Application3 {
public static void main(String[] args) {
DataOutputStream dout = null;
try {
dout = new DataOutputStream
(new FileOutputStream("src/com/song/practice/io/filterStream/score.txt"));
dout.writeUTF("홍길동");
dout.writeInt(100);
dout.writeChar('A');
dout.writeUTF("아이유");
dout.writeInt(99);
dout.writeChar('A');
dout.writeUTF("수지");
dout.writeInt(100);
dout.writeChar('S');
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (EOFException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
if(dout != null) {
try {
dout.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DataInputStream din = null;
try {
din = new DataInputStream(
new FileInputStream("src/com/song/practice/io/filterStream/score.txt"));
while(true) {
System.out.println(din.readUTF() + "," + din.readInt() + "," + din.readChar());
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EOFException e) {
System.out.println("파일 읽기 완료");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(din != null) {
try {
din.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
Java
복사