2013-10-01 1 views
0

InputStreamReader를 사용하여 파일의 문자를 읽고 StringBuilder에 추가하는 것이 일반적인 패턴입니다. 그것을 할 수있는 확실한 방법은 같은 것입니다 : 그러나appendCodePoint에서 InputStreamReader를 사용해야합니까?

int c = reader.read(); 
sb.append((char)c); 

, '아무튼 그 (엄격히 코드 포인트를 말하기) 문자를 포함했다 (이 차이가 있는지 우리가 UTF-8 인코딩을 지정 가정) 파일을 랬 16 비트로 맞 춥니 다. 독자가이를 16 비트 문자 쌍 대신 단일 32 비트 코드 포인트로 반환하겠습니까?

그렇다면, 실제로 위의 마지막 줄 같이 읽어야

sb.appendCodePoint(c); 

알려진 테스트 케이스 있는가 - UTF-8 바이트 시퀀스 - 두 가지 옵션을 구분할 것인가?

+0

별로 일반적이지 않습니다. 대부분의 코드는 실제로 버퍼를 읽거나 라인을 읽습니다. – EJP

답변

1

Reader는 Javadoc에서 말한 것처럼 다음 입력 부분을 단일 문자로 반환합니다. 유일한 예외는 EOS 표시기로 -1은 int.입니다. 제안 사항의 근거가 없습니다.

+0

참. 그러나 "단일 Java 문자"는 실제로 UTF-16 코드 포인트이므로 소스가 BMP 외부의 유니 코드 문자를 cointains하면이 유니 코드 문자를 두 개의 Java 문자로 읽게됩니다. 하지만 : 1)이 시나리오에서는 문제가되지 않습니다. 2) 기본 인코딩 (UTF-8 또는 기타)과 관련이 없습니다. – leonbloy

관련 문제