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 |