티스토리 뷰

Language/java

java.io.BufferedOutputStream

혲이. 2018. 3. 11. 20:09
반응형

https://www.acmicpc.net/problem/11723

 

 

 

상기 문제는 바이트 연산에 관한 문제라 "시간 초과" 문제가 발생할 이유가 없다고 생각했는데....

 

시간초과로 애를 먹었다.

 

원인은 System.out.println이었다!

 

흔히 사용하는 System.out.println()는 자바 API로 unbuffered I/O 방식이다.

버퍼없이 바로바로 출력하는 것이 시간초과를 야기시켰던것같다..(문제가 바로 출력인줄 알았지만 아니었다!)

 

그래서 출력방식을

버퍼 입출력으로 변경하니 바로 정답 처리가 되었다.

 

Buffer 버퍼란 데이터를 일시적으로 저장하기 위한 메모리인데,

데이터를 버퍼에 모아 두었다가, 버퍼가 꽉 차게 될 때 한 번에 쓰게 하면 시스템의 속도나 효율이 향상된다.

 

Java에서 버퍼입출력 예시를 보자

 

1
2
3
4
5
6
7
8
9
  BufferedOutputStream bout =  new BufferedOutputStream(System.out);
 
  bout.write(100);//버퍼에 저장 
 
  bout.flush();// bout 스트림의 버퍼에 있는 데이터를 모두 장치에 출력
 
  bout.close();
 
 
cs

flush()가 호출되지 않으면 버퍼가 꽉 찰 때까지 출력한 데이터가 화면에 나타나지 않을 수 있다.

 

 

 

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함