Java(IO)_07

2024. 11. 11. 17:32·Java/기초 내용 정리

2024-11-11

 

 

 

바이트 스트림을 이용한 경우 >>> 1,076,088,700ns
보조 스트림을 이용한 경우 >>> 14,822,400ns

 

package basic;

import java.io.BufferedInputStream;
import java.io.FileInputStream;

/*
 *  보조 스트림 관련 클래스
 *  - 보조 스트림 : 다른 스트림과 연결 되어 여러가지 편리한
 *  			기능을 제공해 주는 스트림을 말함.
 *  - 파일을 읽거나 쓰기를 진행하게 되면 최종적으로 운영체제의
 *    API를 호출하여 파일에 쓰도록 시키고, 운영체제의 API는
 *    하드 디스크에게 명령을 내려서 파일에 데이터를 기록하게 됨.
 *    이 때 자주 운영체제 API가 호출될수록 하드 디스크 장치나
 *    네트워크 장치가 자주 작동하게 되어 시스템의 효율은 나빠지고,
 *    프로그램 역시 여러 번의 입출력을 진행해야 하므로 입출력의
 *    실행속도가 떨어지게 됨.
 *  - 보조 스트림은 중간에 메모리 버퍼(buffer)와 작업을 함으로서
 *    실행의 성능을 향상시킬 수 있음.
 *    예를 든다면 프로그램은 직접 하드 디스크에 데이터를 보내지 않고,
 *    메모리 버퍼에 데이터를 보냄으로써 쓰기 속도가 향상이 됨.
 *    버퍼는 데이터가 쌓이기만을 기다렸다가 버퍼가 꽉 차게 되면
 *    데이터를 한꺼번에 하드 디스크로 보내 줌으로서 출력 횟수를
 *    줄여주게 됨.
 *    
 *  - 스트림의 성능(기능)을 향상시키는 클래스.
 *  - Bufferedxxx : 버퍼를 제공해 주는 보조 스트림 관련 클래스.
 *  - 버퍼(buffer) : CPU와 IO 간의 속도 차이를 보완해 주는 놈.
 *  - flush() : 버퍼 스트림은 버퍼를 가지고 있기 떄문에 버퍼가 꽉
 *  			찼을 때만 출력되는 특징이 있음. 그러므로 프로그램
 *  			에서 데이터를 출력하였지만 버퍼에 다 차지 않아서
 *  			츨력 장치에 보이지 않는 경우도 있음. 버퍼가 다 차지
 *  			않은 상태에서 버퍼에 있는 데이터를 강제로 출력장치에 
 *  			보낼 떄 사용하는 메서드. 
 */

public class FileIO_07 {

	public static void main(String[] args) throws Exception {
		
		//  1. 바이트 스트림 방식으로 이미지 파일을 읽어 오자.
		FileInputStream fis = new FileInputStream("D:/test/Koala.jpg");
		
		long start, end;
		
		
		start = System.nanoTime();
	
		while (fis.read() != -1) {}
		
		end = System.nanoTime();
		
		System.out.printf("바이트 스트림을 이용한 경우 >>> %,dns\n", (end - start));
		
		fis.close();
		
		//  2. 바이트 스트림에 보조 스트림을 연결하여 이미지 파일을 읽어 오자.
		FileInputStream fis1 = new FileInputStream("D:/test/Koala.jpg");
			
		BufferedInputStream bis = new BufferedInputStream(fis1);
		
		start = System.nanoTime();
	
		while (bis.read() != -1) {}
			
		end = System.nanoTime();
			
		System.out.printf("보조 스트림을 이용한 경우 >>> %,dns", (end - start));
	}
}

'Java > 기초 내용 정리' 카테고리의 다른 글

Java(IO)_09  (0) 2024.11.11
Java(IO)_08  (0) 2024.11.11
Java(IO)_06  (0) 2024.11.11
Java(IO)_05  (0) 2024.11.11
Java(IO)_04  (0) 2024.11.11
'Java/기초 내용 정리' 카테고리의 다른 글
  • Java(IO)_09
  • Java(IO)_08
  • Java(IO)_06
  • Java(IO)_05
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Java(IO)_07
상단으로

티스토리툴바