본문 바로가기
JAVA

221027 Buffering

Buffering : 모아서 처리
방식->버퍼(일반 stream)

BufferdInputStream
PrintStream 

flush: 버퍼의 내용을 출력. 버퍼에 데이터가 가득 차 있건 아니건 버퍼에서 강제로 밀어내도록 하는 메서드.
버퍼-내용이 전부 차면 출력. 내용이 차지 않으면 write나 print를 써도 출력하지 않음. 같은 상황에도 flush는 강제로 출력하게 함.

자바의 경우
println---버퍼에서 바로 출력하는 것. 출력이 끝났으니 줄바꿈을 함
print는 버퍼에 기록을 하고 모아서 출력하는 것. 버퍼에 출력.
이와 유사하게 write는 모아서 출력하고 writeln은 바로바로 출력
ln은 바로 출력한다는 것.

Bufferd InputStream (new FileInputStream()); =>다른 인스턴스로 새로운 인스턴스를 만듦-데코레이터패턴->(책)GoF의 디자인 패턴 참고.

3)버퍼를 이용한 입출력
=>Java 코드를 입출력하는 작업을 작성하면 실제로는 JVM이 운영체제의 Native Method를 호출해서 처리함
자주 입출력을 하는 경우 작업을 할 때마다 Native Method를 호출하면 시스템의 성능이 나빠질 수 있음
이런 경우에는 버퍼를 이용해서 입출력 횟수를 줄이는 것이 좋음!

=>버퍼를 이용하는 바이트 단위 입출력은 BufferdInputStream(읽기)과 PrintStream(쓰기)을 이용합니다.
버퍼에 기록을 할 때는 write메서드 대신에 print 메서드를 사용할 수 있으면 flush메서드를 이용해서 버퍼의 내용을 전부 출력할 수 있음

=>표준 출력 스트림이 System.out인데 이 스트림의 자료형이 PrintStream

 

package java_1027.fileinformation;

import java.io.FileOutputStream;
import java.io.PrintStream;

public class ByteBufferStream {
	public static void main(String[] args) {
		
		try {
			//버퍼를 이용해서 출력하는 스트림 만들기
			PrintStream ps = new PrintStream(new FileOutputStream("./buffer.txt"));
			ps.print("문자열을 버퍼를 이용해서 출력");
			ps.flush();
			ps.close();//데이터가 가득 차 있건 아니건 flush로 밀어낸 다음에 닫아 준다.
			
		} catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
			
			
			
		}
		
		
		
		
	}

}

실행하면 buffer라는 이름의 메모장이 생성됨. 그 안에 print의 내용이 기록된다.

 

'JAVA' 카테고리의 다른 글

221027 Serializable, DTO  (0) 2022.10.27
221027 Character Stream  (0) 2022.10.27
221027 ByteStream-FileOutputStream, FileInputStream  (0) 2022.10.27
221027 FIie과 Stream  (0) 2022.10.27
221026 Properties  (0) 2022.10.26