【Java】SAXで大きなファイルをパースするときに
XMLをSAXでパースするときに
予期せぬバグに遭遇したのでその備忘録.
バグの内容は
のテキスト"Yamada"を取得するときに
であるかのような結果がでた.
原因箇所を探ったところ,
DefaultHandlerのcharactersメソッドにあることが判明.
charactersメソッドのch[]が途中で切れていた.
"Yamada"の場合だと
ch [97]='Y' [98]='a' [99]='m'
ch [00]='a' [01]='d' [02]='a'
これはバッファとして確保されているchのサイズ以上の
ファイルを扱おうとして再度読み込みすることで
テキストが途切れていた.
バッファchのサイズはsetPropertyメソッドで設定するが
それ以上のサイズを扱う場合はプログラマがテキストを
繋ぎ合わせる処理を書く必要がある.
私の場合は,charactersメソッドでStringBuilderにテキスト
をappendで繋ぎ合わせ,エンドタグの処理直前でテキスト部分の
処理を行うことで対処した.