트러블 슈팅
[Java] BufferedWriter 출력 안 됨 이슈
go_getter
2025. 3. 11. 11:22
문제
package baekjoon;
import java.io.*;
public class Buffer {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String inputCnt = br.readLine();
int cnt = Integer.parseInt(inputCnt);
while(cnt!=0){
String inputNums = br.readLine();
String[] stringNums = inputNums.split(" ");
int sum = 0;
for(String i : stringNums){
sum += Integer.parseInt(i);
}
bw.write(sum);
bw.newLine();
cnt--;
}
bw.flush();
bw.close();
}
}
코드를 위와 같이 작성했을 때, 입력만 받고 출력없이 프로그램이 종료되는 문제가 발생했다.
원인
디버깅 했을 때, 출력할 변수인 sum에도 값이 잘 들어가 있는 걸 볼 수 있는데 출력이 되지 않은 걸 보니, `bw.write(sum)`, `bw.flush()` 부분 때문인 것 같다.
어딘가에 실수가 있다기 보다는 내가 BufferedWriter를 이해하고 있지 않은 상태에서 작성한 코드라 조금 더 BufferedWriter에 대해 찾아보면 해결 가능할 것 같았다.
분석
찾아보니 BufferedWriter는 정수를 매개변수로 전달받지만 내부적으로는 값을 아스키코드로 변환해서 문자열로 다루는 함수였다.
따라서 전달한 값을 의도대로 출력하기 위해서는 valueOf로 문자열로 변환한 후에 출력하거나, 개행문자를 추가해주면 됐다.
아스키코드로 변환해서 출력하는 시스템인데, 왜 나는 아무것도 출력이 되지 않았을까해서 아스키코드를 살펴봤다.
피연산자를 1, 2, 3 같이 작은 숫자로만 지정하고 테스트를 했다보니 해당하는 아스키코드 값이 SOH, STX 등의 제어 문자였다.
아래와 같이 피연산자의 값을 크게 지정하고 실행하니 아스키코드 'A'가 출력되는 걸 볼 수 있었다.
해결
첨부된 이미지처럼 write 메서드 안에 문자열을 추가해주니 결과값이 제대로 출력되는 것을 볼 수 있었다.