JAVA 기초

JAVA 19-2

Vanillwa 2023. 9. 6. 20:48

 

BufferedStream

 

package ex6_bufferedStream;

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

// 기반스트림 : 대상에 직접 자료를 읽고 쓰는 스트림
// 보조스트림 : 직접 읽고 쓰는 것이 아닌 기반 스트림에 추가로 사용할 수 있는 기능
// 보조스트림은 실제로 데이터를 주고받는것이 아니지만 기반스트림의 기능을 향상시키거나 새로운 기능을 제공해주고
// 다른 보조스트림과 중첩하여 사용이 가능

// 바이트기반 보조스트림 : BufferedInputStream, BufferedOutputStream
// 문자기반 보조스트림 : BufferedReader, BufferedWriter

public class Ex1_bufferedInputStream {
	public static void main(String[] args) {

		FileInputStream in = null;
		BufferedInputStream bis = null;

		try {
			in = new FileInputStream("C:\\WEB\\work\\Ex_0905/test.txt");
			bis = new BufferedInputStream(in);

			int code = 0;

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

			bis.close(); // 닫을 땐 열어준 순서의 역순으로
			in.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

실행 결과

 


 

BufferedStream과 기존의 Stream 속도 비교

 

img.jpg는 8K 해상도 9.2MB 용량의 이미지 파일이다.

package ex6_bufferedStream;

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

public class BufferedTest {
	public static void main(String[] args) {
		FileInputStream readFile = null;

		FileInputStream bisReadFile = null;
		BufferedInputStream bis = null;

		try {
			System.out.println("기본 스트림으로 읽기 시작");
			readFile = new FileInputStream("C:\\WEB\\work\\Ex_0905/img.jpg");

			long start = System.currentTimeMillis();
			System.out.println("이미지 읽기 시작1");
			while (readFile.read() != -1) {

			}
			System.out.println("이미지 읽기 종료1");

			long end = System.currentTimeMillis();
			double time = (double)(end - start) / 1000;

			System.out.println("소요시간 : " + time + "초");
			System.out.println("기본 스트림 읽기 종료");

			System.out.println("\n보조 스트림 읽기 시작");
			bisReadFile = new FileInputStream("C:\\WEB\\work\\Ex_0905/img.jpg");
			bis = new BufferedInputStream(bisReadFile);

			start = System.currentTimeMillis();
			System.out.println("이미지 읽기 시작2");
			while (bis.read() != -1) {

			}
			System.out.println("이지지 읽기 종료2");

			end = System.currentTimeMillis();

			double result = (double) (end - start) / 1000;
			System.out.println("소요시간 : " + result + "초");
			System.out.println("보조 스트림 읽기 종료");

			readFile.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

실행 결과

 

BufferedStream으로 이미지를 불러왔을 때 훨씬 빠른 속도로 작업을 처리한 것을 알 수 있다

 


 

BufferedStream으로 파일 복제

 

package ex6_bufferedStream;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Ex3_bufferedCopy {
	public static void main(String[] args) {
		FileInputStream readFile = null;
		BufferedInputStream bis = null;
		
		FileOutputStream writeFile = null;
		BufferedOutputStream bos = null;
		
		try {
			readFile = new FileInputStream("C:\\WEB\\work\\Ex_0905/img.jpg");
			bis = new BufferedInputStream(readFile);
			
			writeFile = new FileOutputStream("C:\\WEB\\work\\Ex_0905/copy.jpg");
			bos = new BufferedOutputStream(writeFile);
			
			int code = 0;
			
			while((code = bis.read()) != -1) {
				bos.write(code);
			}
			
			bos.close();
			writeFile.close();
			bis.close();
			readFile.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

실행 결과 : img.jpg의 복사본인 copy.jpg 생성

 


 

'JAVA 기초' 카테고리의 다른 글

JAVA 20-2  (0) 2023.09.07
JAVA 20-1  (0) 2023.09.07
JAVA 19-1  (0) 2023.09.06
JAVA 18-1  (0) 2023.09.05
JAVA 17-2  (0) 2023.09.05