初めての Out of Memory

昨日の作業 の続き。LDRoidで全文表示するテスト。


JavaScriptのXPathライブラリを使うことで、だいたい うまく行くことは確認できた。残念ながらネイティブの document.evaluate() と結果が違うことがあって、うまくいかないものが見つかった。(←使い方が間違っている可能性ありあり) これに関してはライブラリのコードを追いかけるのが大変なのでやっていない。XPathもよく知らないし...。


で、ある程度使えることはわかったので、AutoPagerizeやLDRFullFeedのSITEINFOをwedataからダウンロードして保存する処理の実装に取り掛かった。
SITEINFOのデータはPCにとっては小さいけど、モバイルとしては巨大なので、必要なデータだけを取り出して保存するつもりでいたんだけど、元データのbyte[]をStringに変換するだけで Out of Memory になってしまうことがわかった。
JSON関連のコンストラクタはStringしか受け付けてくれないので、SAXのような処理ができない。仕方なく BufferdStreamReader で行単位で読み出して、必要な部分のみの JSON を StringBuilder で作ってJSONのコンストラクタに渡すことに。これでとりあえず読み込めたけど残念な感じ...。この方法も、元データが2〜3倍になるとたぶん Out of Memory になるだろうけど、端末がアップグレードすればいいかな。


そんな感じでダウンロードするところまではできた。この問題を解決する楽な方法を探してるうちに、日が暮れてしまった。結局最初に思いついたやりたくない方法になってしまった。