» 首頁 » 討論區 » Android程式設計 »關於大量圖像檔案安裝

關於大量圖像檔案安裝

發表人: fenix
積分: 18
發表時間: 2011-09-16 21:15:53
最近正在寫一個自製程式,不過遇到一個問題。

我在程式裏的raw資料夾放了一個6MB的ZIP檔,內蔵大量圖片,我相信各位應該會呆掉吧……囧|||

好吧,我知道這很蠢,但我還是個了個實驗,把這個6MB的ZIP檔抄到SDCARD內,然後在卡內解壓……

不過我遇到一個大問題,解壓時間太過長,我想不到ANDROID解壓一個6MB的ZIP檔超過10分鐘以上,我沒耐性等下去。

但這倒引發我想到的問題,如果我今天在寫遊戲,遊戲內有大量圖檔,那麼各位是怎麼把它們抄進SDCARD內的?還是每次都放在RAW內?

另外是,有沒有辦法把大量圖檔快速地抄進SDCARD內?因為我這個軟件的其中一個目的,是把大量圖檔抄進SDCARD內,除了這些軟件附送的圖檔外,還可以然後容許用戶自行預覽其他圖檔,所以我才會想到,把圖檔都抄進SDCARD內……
發表人: Seachaos
積分: 2432
發表時間: 2011-09-17 10:41:45
您好:
10MB的ZIP 我也有解過,速度並不會慢
但有兩個原因
1. 解ZIP的Buffer設的太小,導致寫入太慢,解決辦法就是把Buffer加大
如下是Android解Zip的範例

[sea:javaCode]
try{
FileInputStream fin = new FileInputStream(_zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
String lastFileName = null;
while ((ze = zin.getNextEntry()) != null) {

if(ze.isDirectory()) {
_dirChecker(ze.getName());
}else{
FileOutputStream fout = new FileOutputStream(_location + ze.getName());
lastFileName = ze.getName();
// 就是這,如果你的Buffer設的太小就會很慢
byte[] buffer = new byte[4096];
int count;
while((count = zin.read(buffer))!=-1){
fout.write(buffer, 0, count);
}
zin.closeEntry();
fout.close();
}

}
zin.close();
return lastFileName;
} catch(Exception e) {
return null;
}
[/sea]

2. 檔案太多,Flash ROM (SDCard等) 的天生缺點就是在寫入大量的小檔會很慢

另外遊戲的話應該是不會有問題的,因為Android的解析度不高,圖一般都不會太大,就算有很多的檔案也是會先Loading到RAM內
發表人: fenix
積分: 18
發表時間: 2011-09-20 13:44:47
[quote]Seachaos 提到:
您好:
10MB的ZIP 我也有解過,速度並不會慢
但有兩個原因
1. 解ZIP的Buffer設的太小,導致寫...[/quote]

非常感謝你!

我發覺我用的decompress class是個簡單的版本,連buffer都沒得設定,所以解壓速度奇慢無比,現在使用你上面的decompress class後解壓超快!

問題已解決,非常謝謝你! ^.^
發表人: Seachaos
積分: 2432
發表時間: 2011-09-21 00:27:48
[quote]fenix 提到:
非常感謝...[/quote]
不會 :D
有Android程式設計上的問題的話歡迎一起研究

另外Buffer很多IO的場合都會用到,他可以提升一定程度的效能