一種基于Android系統(tǒng)的縮略圖存儲方法和裝置的制造方法
【技術領域】
[0001 ]本發(fā)明涉及Android系統(tǒng)技術領域,具體涉及一種基于Android系統(tǒng)的縮略圖存儲方法和裝置。
【背景技術】
[0002]Android(中文名,安卓)系統(tǒng),是一個以Linux為基礎的開源的移動設備操作系統(tǒng),主要應用于智能手機和平板電腦等智能終端設備中。Android系統(tǒng)采用SQLite數(shù)據(jù)庫管理本地文件,SQLite是一款輕型的、關系型數(shù)據(jù)庫。
[0003]圖1是Android設備對本地數(shù)據(jù)管理的流程示意圖。參見圖1中的步驟Sll至步驟S15;步驟SI I,新增一個文件—步驟S12,將該文件插入到數(shù)據(jù)庫—步驟S13,判斷該文件是否為圖片—是則,執(zhí)行步驟S14通過線程創(chuàng)建普通縮略圖(否則,結束流程)—步驟S15,通過線程創(chuàng)建微型縮略圖。例如,當安裝了Android系統(tǒng)的手機通過拍照或者其他方式新增了一張圖片時,系統(tǒng)會創(chuàng)建線程生成兩種縮略圖,一種是尺寸相對較大的普通縮略圖對應步驟S14;另一種是微型的縮略圖對應步驟S15(本發(fā)明即是對這種微型縮略圖存儲方案的改進,下文中出現(xiàn)的縮略圖指這種微型縮略圖)。步驟S15中生成的微型縮略圖的用途非常廣泛。例如,在Android手機上的相機的拍照界面顯示的最新一張圖時使用,或者在第三方拍照軟件拼圖,以及設置即時通訊工具中用戶頭像等較小尺寸的圖片的時候使用。
[0004]Android系統(tǒng)為了減少文件的碎片化以及提高訪問速度,在存儲微型縮略圖時將這些微型縮略圖轉(zhuǎn)換成縮略圖字節(jié)流,保存到DCIM/Camera/.thumnail/thumbdata路徑下的縮略圖字節(jié)流存儲文件(即thumbdata文件)中,并按照縮略圖對應的數(shù)據(jù)庫ID排序。圖2是通過SQLite可視化工具打開的Android本地數(shù)據(jù)庫中ID從18到28的數(shù)據(jù)庫片段示意圖,圖3是thumbdata文件的數(shù)據(jù)存儲結構示意圖,如圖2所示,現(xiàn)有Android系統(tǒng)中數(shù)據(jù)文件在本地數(shù)據(jù)庫存儲時分配到的唯一標識ID是連續(xù)且遞增的,ID為27和28的位置記錄的是圖片信息。參見圖3,為了保證可以根據(jù)縮略圖對應的圖片在數(shù)據(jù)庫中的ID直接查找到對應的縮略圖字節(jié)流在thumbdata文件中的位置。Android系統(tǒng)在thumbdata文件中存儲時只在ID為27和28對應的位置中保存有效數(shù)據(jù),而thumbdata文件對應ID為I至26的位置保存的均為無效數(shù)據(jù)(即補位數(shù)據(jù))。每個縮略圖字節(jié)流在thumbdata文件中都占用1kb的存儲空間,這樣thumbdata文件中不存儲縮略圖字節(jié)流的位置需要用1kb的0x00補齊。由此可知,這種存儲方式導致了 thumbdata文件中很多位置需要無效數(shù)據(jù)0x00補位,造成了存儲空間的極大浪費。
[0005]例如,當一個Android手機中只有一張圖片A,而圖片A在本地數(shù)據(jù)庫中分配的ID為100000時,thumbdata文件的大小則為100000*10kb = lGB。如果用超級編輯器打開這個IGB的縮略圖字節(jié)流存儲文件,將會看到大量“00 00 00 00 00...”這樣的無效數(shù)據(jù),而有效數(shù)據(jù)只占了極少的一部分。實際上,這種存儲模式下thumbdata文件大小取決于最新一張圖片對應的數(shù)據(jù)庫ID,即使本地數(shù)據(jù)庫中只存儲了一張圖片,而該圖片對應的數(shù)據(jù)庫ID為10000,那么在thumbdata文件中前99999*10kb的位置都是無效數(shù)據(jù),只有最后一個位置存儲了縮略圖字節(jié)流(即存儲的是有效數(shù)據(jù))。
[0006]尤其在Android為了保證每個數(shù)據(jù)庫ID對應數(shù)據(jù)的唯一性和數(shù)據(jù)庫安全性,數(shù)據(jù)庫中的ID是持續(xù)遞增且不可復用的前提下。ID—旦被使用過,即使數(shù)據(jù)被刪除了,ID也不會再使用。這樣,當一個Android手機使用數(shù)月,數(shù)據(jù)庫中的ID平均都會達到100000以上。很明顯,現(xiàn)有的Android系統(tǒng)中縮略圖存儲方案造成了存儲空間的嚴重浪費,亟待解決。
【發(fā)明內(nèi)容】
[0007]本發(fā)明提供了一種基于Android系統(tǒng)的縮略圖存儲方法和裝置,以解決現(xiàn)有的Andro id系統(tǒng)中縮略圖存儲方案造成的存儲空間嚴重浪費的問題。
[0008]根據(jù)本發(fā)明的一個方面,提供了一種基于Android系統(tǒng)的縮略圖存儲方法,該方法包括:
[0009]在縮略圖字節(jié)流存儲文件所屬的文件夾中新建索引文件;
[0010]當Android系統(tǒng)的數(shù)據(jù)庫中新增圖片時,生成新增圖片對應的縮略圖,將縮略圖轉(zhuǎn)換為縮略圖字節(jié)流;
[0011]查找縮略圖字節(jié)流存儲文件的尾部位置,將轉(zhuǎn)換后的縮略圖字節(jié)流存儲到縮略圖字節(jié)流存儲文件的尾部位置,使得縮略圖字節(jié)流存儲文件中每個位置存儲的都是有效數(shù)據(jù);
[0012]將縮略圖字節(jié)流的存儲位置信息記錄到索引文件中。
[0013]可選地,將縮略圖字節(jié)流的存儲位置信息記錄到索引文件中包括:
[0014]利用新增圖片在Android系統(tǒng)的數(shù)據(jù)庫中的唯一標識ID,將縮略圖字節(jié)流的存儲位置信息記錄到索引文件中的第N個位置,其中N等于唯一標識ID;以及,將索引文件中第N個位置之前且沒有記錄縮略圖字節(jié)流的存儲位置信息的位置用無效數(shù)據(jù)填充。
[0015]可選地,該方法進一步包括:
[0016]當接收到包含唯一標識ID的縮略圖字節(jié)流查找請求時,根據(jù)唯一標識ID查找索引文件,找到唯一標識ID對應的第N個位置;
[0017]利用查找到的第N個位置記錄的縮略圖字節(jié)流的存儲位置信息,在所述縮略圖字節(jié)流存儲文件中獲取縮略圖字節(jié)流并返回。
[0018]可選地,索引文件中每條記錄占用九個字節(jié)的存儲空間,其中第一個字節(jié)的存儲空間中存儲Byte字節(jié)型數(shù)據(jù),第二至第九個字節(jié)的存儲空間中存儲Long長整型數(shù)據(jù);
[0019]或者,索引文件中每條記錄占用八個字節(jié)的存儲空間,該八個字節(jié)的存儲空間中存儲Long長整型數(shù)據(jù)。
[0020]可選地,當索引文件中每條記錄占用九個字節(jié)的存儲空間時,將九個字節(jié)的存儲空間中的第一個字節(jié)的存儲空間的數(shù)據(jù)作為標志位,用于標記該條記錄是否存儲了縮略圖字節(jié)流的存儲位置信息;是則,表明九個字節(jié)的存儲空間中的第二至第九個字節(jié)的存儲空間存放的是縮略圖字節(jié)流的存儲位置信息,否則,表明九個字節(jié)的存儲空間中的第二至第九個字節(jié)的存儲空間存放的是無效數(shù)據(jù)。
[0021]根據(jù)本發(fā)明的另一個方面,提供了一種基于Android系統(tǒng)的縮略圖存儲裝置,該裝置包括:
[0022]索引文件創(chuàng)建單元,用于在縮略圖字節(jié)流存儲文件所屬的文件夾中新建索引文件;
[0023]縮略圖轉(zhuǎn)換單元,用于當Android系統(tǒng)的數(shù)據(jù)庫中新增圖片時,生成新增圖片對應的縮略圖,將縮略圖轉(zhuǎn)換為縮略圖字節(jié)流;
[0024]存儲單元,用于查找縮略圖字節(jié)流存儲文件的尾部位置,將轉(zhuǎn)換后的縮略圖字節(jié)流存儲到縮略圖字節(jié)流存儲文件的尾部位置,使得縮略圖字節(jié)流存儲文件中每個位置存儲的都是有效數(shù)據(jù);
[0025]索引位置記錄單元,用于將縮略圖字節(jié)流的存儲位置信息記錄到索引文件中。
[0026]可選地,索引位置記錄單元,具體用于利用新增圖片在Android系統(tǒng)的數(shù)據(jù)庫中的唯一標識ID,將縮略圖字節(jié)流的存儲位置信息記錄到索引文件中的第N個位置,其中N等于唯一標識ID;以及,將索引文件中第N個位置之前且沒有記錄縮略圖字節(jié)流的存儲位置信息的位置用無效數(shù)據(jù)填充。
[0027]可選地,裝置還包括:
[0028]索引查找單元,用于當接收到包含唯一標識ID的縮略圖字節(jié)流查找請求時,根據(jù)唯一標識ID查找索引文件,找到唯一標識ID對應的第N個位置;
[0029]利用查