버퍼링된 스트림

지금까지 연구한 스트림은 입출력 스트림이다.

읽기 또는 쓰기 요청을 운영 체제에서 요청하는 즉시 처리하는 것은 매우 비효율적입니다.

디스크 액세스나 네트워크 액세스와 같은 매우 시간 소모적인 작업이 필요하기 때문입니다.

이 오버헤드를 줄이기 위해 Java는 버퍼링된 스트림(버퍼링된 I/O)을 제공합니다.

버퍼링된 출력 스트림 예

package ch05;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainTest1 {

	public static void main(String() args) {
		//기반스트림과 보조 스트림
		
		FileOutputStream fos = null;
		
		try {
			fos = new FileOutputStream("output3.txt");
			// 보조 스트림
			BufferedOutputStream bis = new BufferedOutputStream(fos);
			
			bis.write(97);
			bis.write(98);
			bis.write(99);
			bis.flush(); //물을 내리다.
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}	//end of main

}	//end of class

출력 스트림을 버퍼 스트림 output()에 넣으면 output3.txt에 abc가 나타나는 것을 볼 수 있습니다.

zip 파일 복사(BufferedInputStream, BufferedOutputStream)

package ch05;

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

public class MainTest3 {

	public static void main(String() args) {
		//기반스트림과 보조 스트림
		
		long millisecond = 0;
		
		//1
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream("bubble.zip");
			fos = new FileOutputStream("bubblecopy.zip");
			//보조 스트림 활용하기 !!
			//보조 스트림을 이용해서 읽어내면 걸리는 소요시간이 더 줄어든다.
			BufferedInputStream bis = new BufferedInputStream(fis);
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			
			
			int i;
			millisecond = System.currentTimeMillis(); 	// 10
			while((i= bis.read()) != -1) {
				bos.write(i);
			}
			// 20이 걸렸다고 하면 20 - 10 = 걸린시간을 알수 있다.
			millisecond = System.currentTimeMillis() - millisecond;
			System.out.println("파일 복사시 소요시간 : "+millisecond);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fis.close();
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		
	}	//end of main

}	//end of class

버퍼링된 스트림 입력, output()에 입력/출력 스트림을 넣어 zip 파일을 복사한 것을 볼 수 있습니다.

스캐너를 사용하다

package ch01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedreaderExample {

	public static void main(String() args) {
		//스트림 사용 -> 기반 + 보조
		//키보드에서 값 입력 받는거
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
//		System.out.print("입력 : ");
		try {
			String input = reader.readLine();
			System.out.println("input : " + input);
			// 메인 쓰레드가 일하고 있다.
			while(input != null) {
				System.out.print("입력 : ");
				input = reader.readLine();
				System.out.println("입력한 값 : " + input);
			}
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		
	}	//end of main

}	//end of class

키보드로 입력한 값을 입력 스트림에 넣고, 입력한 값을 읽어주는 버터스트림으로 읽어들인다.

read() : 각 문자 읽기
readLine() : 한 줄의 텍스트 읽기

자동 차단

package ch01;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class KeyboardToFileExample {

	public static void main(String() args) {
		
		//오토 클로즈 - 자동으로 리소스를 닫아 주는 녀석
		//불필요하게 닫아 주는 코드를 작성할 필요는 없다.
		//식은 괄호 안에 작성해주면 된다. - 닫아 줄 녀석들만 작성
		try (
				BufferedReader reader = 
						new BufferedReader(new InputStreamReader(System.in));
				BufferedWriter writer 
				= new BufferedWriter(new FileWriter("output3.txt"));
				){
			// 중괄호 안에는 수행 시킬 코드 작성
			System.out.println("키보드로 입력 받아 데이터를 파일에다가 작성하기 ");
			
			String input = reader.readLine();
			// true -> 부정 --> ! 
			//사용자 입력 값이 quit 가아니라면 true 가 된다.
			while( !(input.equals("quit")) ) {
				// 파일에 글 작성
				writer.write(input);
				writer.newLine();
				// 키보드에서 데이터를 다시 입력 받기
				input = reader.readLine();
			}
			//quit -> 입력하게 되면 while 문 종료 한다.
			System.out.println("출력이 완료되었습니다.");
		}catch (Exception e) {
			e.printStackTrace();
		}
		
	}	//end of main

}	//end of class

키보드로 입력한 값을 output3.txt로 출력하고 quit를 입력하여 루프를 종료합니다.

Similar Posts

  • 자궁근종 하이프 시술비용을 찾으신다면 꼭 알아보겠다

    안녕하세요, 동탄제일병원입니다.이제 곧 8월이 다 되어가는데 벌써 9월을 향해 달려가고 있다니 시간이 빠르네요. 자궁근종 하이프 시술 비용과 함께 오늘날 여성의 3/1이 앓고 있는 매우 흔한 여성 질환인 자궁근종에 대해 배우는 시간을 갖겠습니다. 자궁근종이란 무엇일까요?자궁을 형성하는 평활근에 생기는 일종의 양성종양으로 근육층에 부착된 세포가 비정상적으로 증식하면서 발생합니다 자궁근종 하이프 시술 비용을 듣기 전에도 처음에는 단순히 뱃살이라고 생각하고…

  • 학은제 학점인정 신청, 이젠 쉽게 해결해보세요!

    학점은행제는 많은 이들에게 교육의 기회를 넓혀주는 획기적인 시스템입니다. 그러나 처음 접하는 이들에게는 학점인정 신청 과정이 복잡하게 느껴질 수 있습니다. 오늘은 학점은행제를 통해 학점을 인정받는 방법에 대해 자세히 알아보겠습니다. 이 글을 통해 학점은행제의 신청 과정과 필요한 준비물, 그리고 몇 가지 유용한 팁을 제공하여 학업 목표 달성에 힘이 되도록 하겠습니다. 학점은행제란 무엇인가? 학점은행제는 정부가 주관하여 운영하는 제도로,…

  • 해초로 가자 : Karatsu Nisato Holy Land

    안녕하세요 여러분 이번에는 지난 주말에 다녀온 신사토 성지 여행 이야기를 하려고 합니다! 가라쓰 니사토 신사 당진드라이브에 오면 늘 찾는 곳이라고 한다. 사실 이곳은 카라츠에 살 때 좀처럼 가보지 못한 곳이다. 나는 내가 왜 여기에 왔는지 즉시 이해했습니다. 좋은 날이지만 아쉽다면 하늘이 아니길 바랍니다. 하늘이 조금 더 맑으면 기분도 좋고 사진도 잘 나올 것 같았어요. Xinli…

  • 청년안심주택 자격조건 확인

    청년안심주택 자격조건 확인 청년안심주택 자격조건 확인 이미 많이 오른 집값으로 인해 모든 국민이 내 집 마련이 어렵습니다. 그중에서도 자본금이 없는 청년층은 더 어렵습니다. 그래서 국가에서 이러한 계층의 주거 안정화를 위해 여러 방면의 사업을 제안하고 있습니다. 그 중 하나가 청년안심주택입니다. 많은 관심과 사랑을 받는 제도 중 하나인데 관심 있는 분이라면 주목해 보시기 바랍니다. 이미 많이 오른…

  • 자동차 브레이크 시스템의 중요성

    자동차 브레이크 시스템은 운전자의 안전을 책임지는 중요한 요소인 하나요. 특히 갑작스러운 브레이크 현상은 예기치 못한 상황에서의 교통사고를 예방하기 위해 필수적입니다. 이 글에서는 자동차의 갑작스러운 제동에 대한 원리와 그에 따른 주요 요인에 대해 알아봅니다. 자동차의 갑작스러운 브레이크는 보통 운전자가 페달을 세게 밟는 상황을 의미합니다. 이러한 상황은 예상치 못한 장애나 갑작스러운 상황 변화에 대응하기 위해 발생합니다. 차량의…