ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 성능향상을 위한 보조 스트림-22.04.01
    고급자바 2022. 4. 1. 15:31
    728x90

    폴더를 만들거나 내용을 읽어주는 것은 파일 시스템인데 운영체제가 하고 있다.

    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
Designed by Tistory.