Java - 7. I/O: 보조 스트림

갓김치·2020년 9월 28일
0

고급자바

목록 보기
25/47

보조스트림

Buffered~

BufferedOutputStream: T11

  • 바이트 기반
  • 입출력 성능 향상을 위해서 버퍼를 이용하는 보조스트림
  • 버퍼의 크기를 지정하지 않으면 기본적으로 버퍼의 크기가 8192(8kb)로 설정됨
FileOutputStream fos = null;
BufferedOutputStream bos = null; // buffer를 출력하는 보조스트림
try {
  fos = new FileOutputStream("d:/D_Other/bufferTest.txt");

  // 버퍼의 크기가 5인 스트림 객체 생성 (미설정시 8192(8kb))
  bos = new BufferedOutputStream(fos, 5); // fos를 기반스트림으로 이용

  for (int i = '1'; i <= '9'; i++) { // 숫자 자체를 문자로 지정하기 위해 ' 사용
    bos.write(i); // 버퍼에 5바이트 넣고, 꽉차면 write로 외부로 옮김
                  // flush 이용해 강제 방출 (강제로 write)
  }

//bos.flush(); // 작업 종료전 버퍼에 남아있는 데이터를 모두 출력
               // close시 자동으로 호출됨

  bos.close();
  System.out.println("작업 끝...");


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

BufferedReader: T12

  • 문자 기반
try{
  // 이클립스에서 만든 자바프로그램이 실행되는 기본위치는 해당 '프로젝트 폴더'
  FileReader fr = new FileReader("./src/kr/or/ddit/basic/T11_BufferedIOTest.java");

  /*
  보조스트림 없이 기본 스트림 FileReader만을 사용한 방법

  int c;

  while((c = fr.read()) != -1 ){
    System.out.print((char) c);
  }

  fr.close();
  */

  // 한 줄씩 읽을 수 있도록 해주는 readLine을 이용하기 위해 BufferedReader 사용
  BufferedReader br = new BufferedReader(fr);
  String temp = "";
  for (int i = 1; (temp=br.readLine()) != null; i++) {
    System.out.printf("%4d : %s\n", i, temp);
  }
} catch (Exception e) {

}
  • 결과

DataOutputStream

  • 출력용 데이터를 자료형에 맞게 출력해준다
try{

// 출력하기
FileOutputStream fos = new FileOutputStream("d:/D_Other/test.data");

DataOutputStream dos = new DataOutputStream(fos);

dos.writeUTF("홍길동"); 	// 문자열 데이터 출력(UTF-8)
dos.writeInt(17);	// 정수형으로 데이터 출력
dos.writeFloat(3.14f);	// 실수형(Float)으로 출력
dos.writeDouble(3.14);	// 실수형(Double)으로 출력
dos.writeBoolean(true);	// 논리형으로 출력
System.out.println("출력 완료...");

dos.close(); // 종료

//=====================================

// 출력한 자료 읽어오기
FileInputStream fis = new FileInputStream("d:/D_Other/test.data");

DataInputStream dis = new DataInputStream(fis);

System.out.println("문자열 자료      : " + dis.readUTF());
System.out.println("정수형 자료      : " + dis.readInt());
System.out.println("실수형(Float) 자료  : " + dis.readFloat());
System.out.println("실수형(Double) 자료 : " + dis.readDouble());
System.out.println("논리형 자료      : " + dis.readBoolean());

dis.close(); // 종료
} catch (IOException e) {
  e.printStackTrace();
}
  • 결과

PrintStream & PrintWrite

  • 프린터 기능 제공

PrintStream

  • 모든 자료형을 출력할 수 있는 기능을 제공하는 OutputStream의 서브클래스
  • IOException을 발생시키지 않는다
  • println, print 등 메서드 호출시마다 auto-flush 기능이 제공된다
  • 데이터를 문자로 출력하는 기능을 수행함
  • 향상된 기능의 PrintWriter가 추가되었지만 PrintStream이 계속 사용됨
FileOutputStream fos = new FileOutputStream("d:/D_Other/print.txt");

FileOutputStream fos2 = new FileOutputStream("d:/D_Other/print2.txt");

PrintStream out = new PrintStream(fos); // 목적지 : 새파일
//PrintStream out = new PrintStream(System.out); // 목적지 : 콘솔

out.print("안냐심까. PrintStream 이올시다.\n");
out.println("안냐심까. PrintStream 이올시다2.");
out.println("안냐심까. PrintStream 이올시다3.");
out.println(out); // 객체 출력
out.println(3.14);

out.close();

PrintWriter

  • PrintWriter가 PrintSream보다 다양한 언어의 문자를 처리하는데 적합하다.
  • 둘 다 기본적으로 auto-flush 기능이 꺼져있음
PrintWriter writer = new PrintWriter(new OutputStreamWriter(fos2, "UTF-8"));
writer.print("안냐심까. PrintWriter 입니다.\r\n");
writer.println("안냐심까. PrintWriter 입니다.2");
writer.println("안냐심까. PrintWriter 입니다.3");

writer.close();
profile
갈 길이 멀다

0개의 댓글