Java & Kotlin
Java Buffer
필자A
2022. 12. 11. 09:26
Buffer라는 개념은 일반적으로
데이터를 제공하는 곳과 제공받는 곳의 성능의 차이를 매꾸기위해 사용되며
한가지의 예로 저속장치가 작업을 처리하는 동안 고속장치가 기다리는 현상이 줄어듭니다.
저속의 장치의 작업을 기다려야 할 경우 만약 프린터의 성능을 저속 컴퓨터의 성능을 고속이라고 가정하면
프린터의 작업이 끝날때까지 컴퓨터를 사용할 수 없습니다.
또한 I/O요청이 줄어드는 결과가 생깁니다.
I/O란?
Input(입력)과 Output(출력)의 약자입니다.
컴퓨터 외부(Keyboard, Mouse)또는 내부(HDD, SSD)와 데이터를 서로 주고 받는 것
BufferInputStream?
보조스트림인 BufferInputStream을 사용해보기
BufferInputStream이 생성되면 내부 버퍼배열(기본 8,192Byte)이 생성됩니다.
이미 생성된 스트림에 배열 기능을 추가해 더 빠르게 입출력을 실행할 수 있는 버퍼링 기능을 제공합니다.
// not Buffer
FileInputStream fis1 = new FileInputStream("file path");
long start1 = System.currentTimeMillis();
while ((fis1.read())!= -1) {}
long end1 = System.currentTimeMillis();
System.out.print("\n" + (end1 - start1));
fis1.close();
// Buffer
FileInputStream fis2 = new FileInputStream("file path");
BufferedInputStream bis2 = new BufferedInputStream(fis2);
long start2 = System.currentTimeMillis();
while ((bis2.read())!= -1) {}
long end2 = System.currentTimeMillis();
System.out.print("\n" + (end2 - start2));
fis2.close();
bis2.close();
// 소요시간 약 20배 차이
Buffer를 사용하지 않는 경우 1Byte단위로 I/O가 일어나서 효율이 떨어지게 됩니다.
Socket통신으로 받은 간단한 문자열 출력
Server
ServerSocket sc = new ServerSocket(8081);
Socket socket = sc.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String data;
while ((data = br.readLine()) != null){
System.out.print(data);
}
Client
String MESSAGE = "hello 메시지";
Socket cs = new Socket("127.0.0.1", 8081);
OutputStream os = cs.getOutputStream();
os.write(MESSAGE.getBytes());
os.flush();
반응형