import java.io.*;
// BufferedInputStream 사용 필터링을 수행하는 스트림,
//바이트 단위로 들어오는 데이터를 버퍼에 차곡차곡 모아서 읽어 들인다
//데이터는 버퍼에 누적되고 버퍼가 가득차면 한꺼번에 읽어 들인다. 기본 버퍼크기:512byte
class BIStream1
{
public static void main(String[] args) throws Exception
{
//데이터 소스 : 키보드
//노드스트림 : System.in
//필터스트림 : BufferedInputStream
InputStream is = System.in;
BufferedInputStream bis = new BufferedInputStream(is);
//필터링-노드스트림과 필터 스트림을 연결
PrintStream ps = System.out;
BufferedOutputStream bos = new BufferedOutputStream(ps);
int r=0;
byte ba[] = new byte[100];
while((r=bis.read(ba)) != -1) {
bos.write(ba);
bos.flush();
}//while---------------------
bis.close(); bos.close();
is.close(); ps.close();
}//main()-----------
}///////////////////////////////////////////////////////////////////////////
import java.io.*;
class BIStream2
{
public static void main(String[] args) throws Exception
{
//데이터 소스 : 파일(BIStream1.java)
//데이터 목적지 : 콘솔, 파일[Result.txt]로 출력
//BufferedInputStream과 BufferedOutputStream으로 필터링을 이용해서 구현
FileInputStream fis = new FileInputStream("BIStream1.java");
BufferedInputStream bis = new BufferedInputStream(fis);
//필터링-노드스트림과 필터 스트림을 연결
BufferedOutputStream bos = new BufferedOutputStream(System.out);
BufferedOutputStream bos2 = new BufferedOutputStream(
new FileOutputStream("Result.txt"));
int r=0;
while((r=bis.read()) != -1) {
bos.write(r); //콘솔에 쓰고
bos2.write(r); //파일에 쓰고
bos.flush();
bos2.flush();
}//while---------------------
bis.close(); bos.close(); bos2.close();
fis.close(); System.out.close();
}//main()-----------
}/////////////////////////////////////////////////////////////////////////////////////