2012年12月15日土曜日

KyoroText で使用されている技術 その2



続き....

大きなサイズのファイルをヒープに読み込むのは、時間がかかります。この問題に対処した結果、一部だけ読み込めば良いと考えるに至りました。


[KyoroTextの場合]


KyoroTextに適用した方法を紹介します。
※改善すべき点は多々ありますが、当時だした結論を紹介します。



[問題の整理]

結論だけ紹介するには、少し複雑で説明が難しいです。まずは、何を実現したいのか整理させてください。実現したい事はとても単純でした。
   A) ファイルからテキストを読み込んで、それを、画面に表示したい。
と、いった感じです。
   ※今回は、「ファイルに詠み込む部分」がかなり重たい処理なためひと工夫必要なわけですね。


 もう少し具体的に表現してみましょう。 例えば、「画面を表示担当」と、「ファイルからデータを読み込み担当」を別々に考えるとより理解しやすくなります。

[1] 表示担当は、ファイル担当から表示するデータをもらう。
   |  表示担当 |  -----データーください!!----> |ファイル担当|

[2] ファイル担当は、データを返す。
   |  表示担当  | <--------ホラよっと---------  |ファイル担当|

かなり、簡単になりました!!


[KyoroTextの解決方法]

KyoroText採用した方法として、「ホラよっと返すデーター」を直ぐに表示側に渡せない場合には、「Loading....」と、テキストを返すようにしました。これで、どんなに時間がかかっても表示するデーターに困ることがなくなります。

あとは、「ホラよっと、返すデーター」が、なるたけ、ファイルから読み込んだデーターになるように調整すれば良いだけになります。
※指定された行周辺のデーターを、キャッシュしておけば、スムーズに表示できそうですね!!


[登場したクラス]
登場したクラスとメソッドは以下
// 画面にテキストを表示する
Viewer# drawMultiLineText()
    
// 指定された行のデーターを返す。キャッシュがなければ、「Loading....」と、テキストを返す
FileReader#getLine(int index)



[その3のネタ]

では、どのようにして、テキストデーターをキャッシュすると、良い感じになるでしょうか。
いくつかアプローチ方法が考えられます。次回、別の課題として紹介する予定です。
- 知識面の話では、「文字コードごとの可能な戦略について」説明します。
- 話のネタとしては、「KyoroText以外のアプリが採用している方法」「KyoroTextが採用している方法の欠点」について説明します。

つづく..


0 件のコメント:

コメントを投稿