2016년 9월 19일 월요일

Apache Common IO의 BOMInputStream의 버그

Java는 BOM을 별도로 처리해주지 않는다고 한다.
http://bugs.java.com/view_bug.do?bug_id=4508058
http://bugs.java.com/view_bug.do?bug_id=6378911

유니코드에서는 UTF-8인 경우 BOM을 넣지 말도록 권장한다.
하지만 넣는다고해서 BOM규칙을 어기는 것도 아니다.
https://en.wikipedia.org/wiki/Byte_order_mark

즉, BOM은 있을 수도 있고, 없을 수도 있고, Java가 알아서 처리해주지도 않는다.
그래서 아파치에서 Common IO에 BOMInputStream을 만들어놨다.
https://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/input/BOMInputStream.html

그런데 BOMInputStream을 사용하면서 뜻밖의 사소한 버그로 고생을 좀 했다.

첫번째 버그
BuffredReader로 감싸서 readLine()을 호출하면 파일의 마지막에서 null을 리턴하지 않고, IOException을 발생시킨다.
이건 2.0.1에서 고쳐진 버그이다.
https://issues.apache.org/jira/browse/IO-257
http://svn.apache.org/viewvc?view=revision&revision=1052095

두번째 버그
hasBOM(ByteOrderMark) 메서드가 올바른 값을 리턴하지 않는다. hasBOM()을 한번 호출하고 나면 올바른 값을 리턴한다. 이건 누군가가 아파치 JIRA에 리포팅해서 수정도 했지만, 반영되진 않은 상태이다.
https://issues.apache.org/jira/browse/IO-482


댓글 없음:

댓글 쓰기