-Jarの取り扱い

Jarの取り扱いはいくつか方法があります。URLClassLoaderからの系ではJarURLConnectionを用いる方法もありますし、ファイルシステムからの系などではFileInputStream等を経由して、JarInputStreamを用います(こちらのほうがおそらく根源的)。これらはテクニックとして違うし、どちらもかゆいのですが。。。まあ、これはいずれ解説することにして、とりあえずMayaは現在のURLClassLoaderの系からの脱却。JarInputStreamのほうでやります。。。と、昨日の風呂タイムで実装シミュレーションしました。InputStreamはSourceDescriptorで抽象化して持っているので、そこからJar処理ドライバを作って取り扱います。Jar処理ドライバで実装上いくらかステップ数が見込まれるのは、JarEntryのストリーム取得が後に行うのについて、先に読み込みしなくてもよいように遅延キャッシュできるかどうか(まだ考えてない)の仕組みかな。これを素直にやるとJarのエントリを全部読み出しちゃうので工夫がない。ファイルシステムに処理の端を発するのであればJarFileが取れるのでJarFile#getInputStream(JarEntry)で遅延できるのですが、InputStreamがスタートだとこのへんが難しい。
追記
遅延処理で即挫折。どうしてもメモリを食ってしまう。。。ファイルシステムでやるベタなやり方でなければならないのか。
再追記
とりあえず、ベタな手法ですが対応。Skirnirさんの要件は満たしたかと思います。今のところテストは2つばかりとおらないのが出ます。それは既知。動作には問題ありません。