티스토리 뷰

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();
반응형

'Java & Kotlin' 카테고리의 다른 글

Java Generic  (0) 2022.12.12
Java NIO  (0) 2022.12.11
Java Stream  (0) 2022.12.10
Java annotation  (0) 2022.12.10
Java enum  (0) 2022.11.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함