-
성능향상을 위한 보조 스트림-22.04.01고급자바 2022. 4. 1. 15:31728x90
폴더를 만들거나 내용을 읽어주는 것은 파일 시스템인데 운영체제가 하고 있다.
1바이트씩 처리-> 여러번 읽어야 하고, 속도 넘 느리다. 그래서 데이터를 한번에 모아서 처리하는것이 입출력성능 향상되고 효율적이다. 즉 버퍼가 이역할을 한다.
입출력 성능 향상을 위한 보조스트림 예제
(바이트 기반의 Buffered 스트림 사용 예제)import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class T11_BufferedIOTest { public static void main(String[] args) { // 입출력 성능 향상을 위해서 버퍼를 이용하는 보조 스트림 FileOutputStream fos = null; BufferedOutputStream bos = null; //바이트 기반 try { fos = new FileOutputStream("d:/D_Other/bufferTest.txt"); // 버퍼의 크기를 지정하지 않으면 기본적으로 버퍼의 크기가 8192byte(8Kb)로 설정된다. // 버퍼의 크기가 5byte인 스트림 생성하기 bos = new BufferedOutputStream(fos,5); //BufferedOutputStream(fos)-8192byte for(int i = '1'; i<='9'; i++) { //숫자 자체를 문자로 지정하기 위해서 bos.write(i); //1~9인데 5byte이므로 2번만 작동 } bos.flush(); // 작업을 종료하기 전에 버퍼에 남아있는 데이터를 모두 출력시킨다. // (close시 자동으로 호출됨.) System.out.println("작업 끝..."); }catch(IOException e) { e.printStackTrace(); }finally { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } }

6789는 write가 안되기 때문에 flush()가 필요함!!!
성능향상을 위한 보조스트림 예제2
* (문자 기반의 Buffered스트림 사용예제)
public class T12_BufferedIOTest { public static void main(String[] args) { FileReader fr=null; try { /*이클립스에서 만든 자바 프로그램이 실행되는 기본 위치는 해당 '프로젝트 폴더'가 기본위치가 된다. */ fr=new FileReader("./src/kr/or/ddit/basic/T11_BufferedIOTest.java"); int data=0; while((data=fr.read())!=-1) { System.out.print((char)data); } } catch (IOException ex) { ex.printStackTrace(); }finally { try { fr.close(); }catch(IOException e) { e.printStackTrace(); } } } }
+수정
한줄씩 읽을 수 있도록 해주는 readLine을 이용하기 위해 BufferedReader사용
mport java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class T12_BufferedIOTest { public static void main(String[] args) { FileReader fr=null; //한줄씩 읽을 수 있도록 해주는 readLine을 이용하기 위해 BufferedReader사용 BufferedReader br=null; try { /*이클립스에서 만든 자바 프로그램이 실행되는 기본 위치는 해당 '프로젝트 폴더'가 기본위치가 된다. */ fr=new FileReader("./src/kr/or/ddit/basic/T11_BufferedIOTest.java"); br=new BufferedReader(fr); String temp=""; for(int i=1; (temp=br.readLine())!=null; i++) { System.out.printf("%4d : %s\n",i,temp); } } catch (IOException ex) { ex.printStackTrace(); }finally { try { br.close(); //fr.close(); }catch(IOException e) { e.printStackTrace(); } } } }
위 결과와 똑같은데 앞에 줄번호와 같이 출력됨
728x90'고급자바' 카테고리의 다른 글
직렬화,역직렬화-22.04.01 (0) 2022.04.01 기본타입 입출력 보조 스트림-22.04.01 (0) 2022.04.01 보조스트림, 인코딩 -22.04.01 (0) 2022.04.01 스트림-22.04.01 (0) 2022.04.01 File객체 만들기-22.03.31 (0) 2022.03.31