▣ sax 파서를 이용해 파싱 시, 문자열 잘림/짤림 현상 원인 및 해결 방법을 알아보자.
안녕하세요 기요밍 입니다.
오늘은 sax 파서를 사용할 때 버그의 원인이 될 수 있는 문자열 짤림 현상의 원인 및 해결 방법에 대해서 알아 보겠습니다.
sax 파서에 대한 포스팅도 하지 않았는데... ㅠ_ㅠ 이걸 먼저 쓰게 되네요 ㅎㅎ
오늘 운영 환경에서 메세지를 받아 처리하고 있는데 갑자기 시간을 포멧팅 하지 못해 에러가 발생했습니다.
원인을 확인 해보니 xml 메세지에서 시간을 파싱해 포멧 변경을 한 뒤 사용하는데.. 시간 문자열이 0:30:23.142 이런식으로 들어간게 원인이었습니다.
원본 메세지에서는 2000-01-01 10:30:23.142 이런식으로 잘 전송 되었는데도 말이죠..
◈ 원인
이 문제의 발생 원인은 sax 파서의 내부 buffer에 대해 이해를 하지 못한 채 개발한 것에 있었습니다. sax 파서는 내부적으로 2k의 버퍼를 사용하고, 그 이상의 메세지가 들어오면 2k의 버퍼를 추가하는 방식으로 메모리 관리를 하는데요. 그래서 2k 이상 되는 xml이 들어왔을 때 그 경계에 있는 문자열이 잘려서 들어가게 된 것입니다. |
◈ 해결 방법
해결 방법은 간단 합니다. sax 파서의 handler의 characters에 append로 value를 넣게 처리해주면 됩니다.
public void characters (char ch[], int start, int length) { value.append(new String(ch, start, length)); } 이렇게 말이죠.. |
처음에는 몰라서 엄청 고민하고 걱정 했지만..
알고 나니 별거 아니었습니다...
다행이도 시간에서 오류가 발생해 크게 문제는 발생 안했지만 만약 특정 value에서 문제가 발생 했다면..
에러를 찾기도 힘들었을테고 잘못된 값들이 들어갔겠지요..
자... 그럼 이만 포스팅을 마치겠습니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 자바 7 64비트,32비트 다운로드 및 설치하는법 방법 (0) | 2015.10.25 |
---|---|
[Java] 자바 ArrayList등의 List에 값이 포함되어 있는지 확인 하는법 (0) | 2015.10.24 |
[Java] 자바 오버로딩 오버라이딩을 구분 해보자!! 차이점은? (0) | 2015.08.06 |
[Java] 자바 문자열 치환/변환 replace()와 replaceAll()의 차이점은? (1) | 2015.08.04 |
[Java] 자바 HashMap등 Map 자료구조의 Key값을 추출해 이용 해보자 (0) | 2015.08.02 |