[JAVA] BufferedWriter 출력초과 이유

JJinu·2022년 11월 23일
0

이 글은 BOJ - 1874 번 스택 수열에서 BufferedWriter를 사용하였을 때 출력 초과가 나와 작성하는 글 입니다.

BufferedWriter의 기본 버퍼 크기는 16384byte라고 합니다.

BufferedWriter의 경우 일정한 버퍼 크기를 가지고 출력할 내용물이 버퍼를 가득 메울 때까지는 실제로 출력을 하지 않고 있지만, 버퍼의 크기를 초과해서 더 write를 하려는 경우 스스로 flush를 해서 출력을 다 시키고 다음 내용을 버퍼에 저장하게 됩니다. 그렇기 때문에 NO를 출력해야 되는 경우에도 + 또는 -로 된 문자열을 출력될 수 있어서 출력초과라는 결과를 얻었습니다.

해결방법은 2가지 정도 있을 것 같습니다.
1. 중간중간 write를 하지 않고 배열을 만들어 결과값을 배열에 집어넣고 마지막에 버퍼에 집어넣고 flush()하여 출력

  1. StringBuilder 사용

StringBuilder 사용 이유
String은 불변(immutable) 객체로 값을 변경할 수가 없으며 만약 String a, String b라는 2개의 객체를 더할 경우 (+)를 이용한 값 변경은 기존에 String에 들어있던 값을 버리고 새로운 값을 할당하기에 해당 연산이 많아진다면 성능이 떨어지게 됩니다.

그래서 사용하는 것이 StringBuilder 인데 변하는 녀석으로 (mutable) 문자열을 더할 때 새로운 객체를 생성하는 것이 아닌 기존의 데이터에 더하는 방식으로 속도도 빠르며 상대적으로 부하가 적다고 합니다.

[관련 메소드]

StringBuilder append(값)StringBuilder 뒤에 값을 삽입
StringBuilder insert(인덱스, 값)특정 인덱스부터 값을 삽입
StringBuilder delete(인덱스, 인덱스)특정 인덱스부터 인덱스까지 값을 삭제
int length()StringBuilder 길이(int) 반환
StringBuilder reverse()글자 순서를 뒤집음
profile
코린이 탈출을 위한 한권의 책

0개의 댓글