關於大量圖像檔案安裝
發表人:
fenix
積分: 18
積分: 18
最近正在寫一個自製程式,不過遇到一個問題。
我在程式裏的raw資料夾放了一個6MB的ZIP檔,內蔵大量圖片,我相信各位應該會呆掉吧……囧|||
好吧,我知道這很蠢,但我還是個了個實驗,把這個6MB的ZIP檔抄到SDCARD內,然後在卡內解壓……
不過我遇到一個大問題,解壓時間太過長,我想不到ANDROID解壓一個6MB的ZIP檔超過10分鐘以上,我沒耐性等下去。
但這倒引發我想到的問題,如果我今天在寫遊戲,遊戲內有大量圖檔,那麼各位是怎麼把它們抄進SDCARD內的?還是每次都放在RAW內?
另外是,有沒有辦法把大量圖檔快速地抄進SDCARD內?因為我這個軟件的其中一個目的,是把大量圖檔抄進SDCARD內,除了這些軟件附送的圖檔外,還可以然後容許用戶自行預覽其他圖檔,所以我才會想到,把圖檔都抄進SDCARD內……
我在程式裏的raw資料夾放了一個6MB的ZIP檔,內蔵大量圖片,我相信各位應該會呆掉吧……囧|||
好吧,我知道這很蠢,但我還是個了個實驗,把這個6MB的ZIP檔抄到SDCARD內,然後在卡內解壓……
不過我遇到一個大問題,解壓時間太過長,我想不到ANDROID解壓一個6MB的ZIP檔超過10分鐘以上,我沒耐性等下去。
但這倒引發我想到的問題,如果我今天在寫遊戲,遊戲內有大量圖檔,那麼各位是怎麼把它們抄進SDCARD內的?還是每次都放在RAW內?
另外是,有沒有辦法把大量圖檔快速地抄進SDCARD內?因為我這個軟件的其中一個目的,是把大量圖檔抄進SDCARD內,除了這些軟件附送的圖檔外,還可以然後容許用戶自行預覽其他圖檔,所以我才會想到,把圖檔都抄進SDCARD內……
發表人:
Seachaos
積分: 2432
積分: 2432
您好:
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內
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
積分: 18
[quote]Seachaos 提到:
您好:
10MB的ZIP 我也有解過,速度並不會慢
但有兩個原因
1. 解ZIP的Buffer設的太小,導致寫...[/quote]
非常感謝你!
我發覺我用的decompress class是個簡單的版本,連buffer都沒得設定,所以解壓速度奇慢無比,現在使用你上面的decompress class後解壓超快!
問題已解決,非常謝謝你! ^.^
您好:
10MB的ZIP 我也有解過,速度並不會慢
但有兩個原因
1. 解ZIP的Buffer設的太小,導致寫...[/quote]
非常感謝你!
我發覺我用的decompress class是個簡單的版本,連buffer都沒得設定,所以解壓速度奇慢無比,現在使用你上面的decompress class後解壓超快!
問題已解決,非常謝謝你! ^.^
發表人:
Seachaos
積分: 2432
積分: 2432
[quote]fenix 提到:
非常感謝...[/quote]
不會 :D
有Android程式設計上的問題的話歡迎一起研究
另外Buffer很多IO的場合都會用到,他可以提升一定程度的效能
非常感謝...[/quote]
不會 :D
有Android程式設計上的問題的話歡迎一起研究
另外Buffer很多IO的場合都會用到,他可以提升一定程度的效能