私は現在、一連の画像を含むアセットフォルダーにある zip ファイルを読み取るアプリケーションを作成しています。ZipInputStream
API を使用してコンテンツを読み取り、各ファイルを my:Environment.getExternalStorageDirectory()
ディレクトリに書き込みます。すべてが機能していますが、最初にアプリケーションを実行してストレージディレクトリに画像を書き込むのは非常に遅いです。イメージをディスクに書き込むのに約 5 分かかります。私のコードは次のようになります。
ZipEntry ze = null;
ZipInputStream zin = new ZipInputStream(getAssets().open("myFile.zip"));
String location = getExternalStorageDirectory().getAbsolutePath() + "/test/images/";
//Loop through the zip file
while ((ze = zin.getNextEntry()) != null) {
File f = new File(location + ze.getName());
//Doesn't exist? Create to avoid FileNotFoundException
if(f.exists()) {
f.createNewFile();
}
FileOutputStream fout = new FileOutputStream(f);
//Read contents and then write to file
for (c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
}
fout.close();
zin.close();
特定のエントリの内容を読み取ってから書き込むプロセスは、非常に低速です。書くことよりも読むことに関係していると思います。配列バッファを使用してプロセスを高速化できることを読みましたbyte[]
が、これは機能していないようです! これを試しましたが、ファイルの一部しか読み取れません...
FileOutputStream fout = new FileOutputStream(f);
byte[] buffer = new byte[(int)ze.getSize()];
//Read contents and then write to file
for (c = zin.read(buffer); c != -1; c = zin.read(buffer)) {
fout.write(c);
}
}
これを行うと、約600〜800バイトしか書き込まれません。これをスピードアップする方法はありますか?? バッファ配列を正しく実装していませんか??