• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      淺析基于Android的大文本閱讀器

      2014-04-29 00:44:03周一帆
      電腦迷 2014年9期
      關(guān)鍵詞:編碼

      周一帆

      摘 要 Android是市場(chǎng)占有率最大的一個(gè)平臺(tái),Android平臺(tái)下的APP也各式各樣,各種各樣的文本閱讀器也隨之產(chǎn)生。傳統(tǒng)IO流與NIO流相差甚大,但在JDK 1.4 中原來(lái)的 I/O 包和 NIO 已經(jīng)很好地集成了,所以即使采用傳統(tǒng)IO流的方式讀取速度也不會(huì)相差很大。讀取方式需要采取分塊讀取的方式,否則會(huì)很占內(nèi)存。文本閱讀器還需要解決的問(wèn)題有編碼問(wèn)題,一個(gè)好的文本閱讀器應(yīng)該支持多種編碼格式的文本。

      關(guān)鍵詞 Android IO 文本閱讀器 編碼

      中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A

      現(xiàn)如今,移動(dòng)市場(chǎng)發(fā)展十分迅速,而Android是移動(dòng)市場(chǎng)中所占比例最大的一個(gè)平臺(tái)。截至2013年年底,Android的市場(chǎng)占有率從2012年的68.8%提升至78.9%,而蘋(píng)果的IOS則從2012年的19.4%下降到15.5%,Microsoft的Windows Phone則從2.7%上升到3.6%。可以看出,在智能手機(jī)市場(chǎng)已經(jīng)接近飽和的情況下,IOS平臺(tái)和WP平臺(tái)小幅波動(dòng)下,Android平臺(tái)在上升了10個(gè)百分點(diǎn),實(shí)屬不易。相較于IOS,Android系統(tǒng)比較開(kāi)放,比較大眾化,而且支持Android系統(tǒng)的手機(jī)也比較多,所以很多人愿意選擇系統(tǒng)。

      對(duì)于Android而言,Android應(yīng)用程序是JAVA語(yǔ)言編寫(xiě)的。同時(shí),對(duì)于JAVA語(yǔ)言而言,Android平臺(tái)的出現(xiàn),讓JAVA語(yǔ)言重生,因?yàn)锳ndroid平臺(tái)應(yīng)用開(kāi)發(fā)的語(yǔ)言就是JAVA,這讓許多癡迷于APP開(kāi)發(fā)的開(kāi)發(fā)者們都紛紛深入了解JAVA。

      Android響應(yīng)速度主要指的是JVM,即JAVA 虛擬機(jī)的速度。隨著各式各樣的APP的風(fēng)靡,文本閱讀器也隨處可見(jiàn)。對(duì)于大文本來(lái)說(shuō),文本閱讀器的性能好壞就體現(xiàn)在響應(yīng)速度上。

      對(duì)于手機(jī)等移動(dòng)設(shè)備來(lái)說(shuō),運(yùn)行內(nèi)存實(shí)在有限。所以,處理起各種應(yīng)用來(lái)最需要保證的就是占用內(nèi)存不能太大。而對(duì)于文本閱讀器來(lái)說(shuō),如果用傳統(tǒng)的方式去讀取,然后將讀取到的全部存起來(lái),如果這個(gè)文本有1G,那么這個(gè)程序就該被列入最爛APP排行榜了。

      所以,Android文本閱讀器需要最解決的問(wèn)題就是內(nèi)存的問(wèn)題。所以現(xiàn)在的解決方案就是,少讀取到內(nèi)存。但是文本閱讀是一個(gè)動(dòng)態(tài)的過(guò)程,沒(méi)有一個(gè)開(kāi)發(fā)者會(huì)知道每一個(gè)使用者每次會(huì)讀多少的文本,會(huì)讀多大的文本。所以必須有一個(gè)合適的算法,來(lái)進(jìn)行對(duì)這個(gè)未知的文本進(jìn)行讀取。

      對(duì)于JAVA而言,讀取文件需要的就是IO流。在J2SE1.4以上版本中發(fā)布了全新的I/O類庫(kù),即NIO包。選取使用哪種IO流對(duì)文本閱讀器的速度也有很大的影響。在傳統(tǒng)I O流是面向流的,就是說(shuō)這種流真的像流水一般,過(guò)去了就不能往回流。而NIO是面向緩沖的,它讀到的數(shù)據(jù)會(huì)存到一個(gè)緩沖區(qū)里。有了這個(gè)緩沖區(qū)事情就好辦了,必要的時(shí)候,它可以在緩沖區(qū)里前后移動(dòng)。這就使得流使用起來(lái)方便了許多。除此之外,傳統(tǒng)IO流都是阻塞的,當(dāng)一個(gè)線程調(diào)用了讀或者寫(xiě)的方法的時(shí)候,該線程就會(huì)阻塞,直至數(shù)據(jù)完全取得或者數(shù)據(jù)完全寫(xiě)入。這就降低了效率,而NIO是非阻塞的。當(dāng)該線程啟動(dòng)了流之后,該線程不需要等待數(shù)據(jù)完全取得或者完全寫(xiě)入,就可以執(zhí)行其他的操作。經(jīng)過(guò)不完全準(zhǔn)確測(cè)試,讀取一個(gè)10M的文本,使用NIO的所需要的平均時(shí)間為2秒,而使用傳統(tǒng)IO則平均需要3秒。

      但在JDK1.4中原來(lái)的I/O包和NIO已經(jīng)很好地集成了。java.io.* 已經(jīng)以 NIO 為基礎(chǔ)重新實(shí)現(xiàn)了,所以現(xiàn)在它可以利用 NIO 的一些特性。這使得傳統(tǒng)IO雖然面向流,但是處理速度提高了不少。

      這個(gè)時(shí)候還會(huì)遇到的一個(gè)問(wèn)題是編碼問(wèn)題,文檔的編碼方式有很多,一個(gè)文本閱讀器應(yīng)支持多種編碼。解決編碼問(wèn)題的方式有多種,可以通過(guò)讀取文件頭來(lái)判斷。對(duì)于txt文檔來(lái)說(shuō),如果只需要支持UTF-8,Unicode和GBK的話,只需要讀取文件的頭兩個(gè)字節(jié)就可以了。網(wǎng)上也有一些開(kāi)源的判斷編碼的jar包,比如說(shuō)cpdetector.jar等。但是讀取文件頭是一種很不錯(cuò)的選擇,因?yàn)橄噍^于調(diào)用開(kāi)源的jar包,讀取文件頭的方式十分快速。

      再回到分塊讀取的問(wèn)題上來(lái)。無(wú)論采用哪種流進(jìn)行分塊讀取,定位都是一個(gè)很棘手的問(wèn)題,比如說(shuō)以字節(jié)讀取,那么就要根據(jù)編碼來(lái)處理定位,否則就會(huì)出現(xiàn)亂碼。如果直接讀取字符,比如說(shuō)BufferedDRead里面的readline()方法。根據(jù)這種方法讀取雖然不會(huì)出現(xiàn)亂碼的問(wèn)題,但是定位起來(lái)相當(dāng)麻煩。但是采用內(nèi)存映射還是一種不錯(cuò)的方法。

      一個(gè)文本閱讀器的實(shí)現(xiàn)方法有很多種,基于Android的文本閱讀器需要考慮的最基本問(wèn)題就是以上提出的用哪種流,如何編碼以及如何定位問(wèn)題。

      參考文獻(xiàn)

      [1] 熊健.基于Android平臺(tái)的企業(yè)移動(dòng)應(yīng)用開(kāi)發(fā)框架的分析與設(shè)計(jì)[J].軟件,2012,33(11).

      [2] 姚昱曼,劉衛(wèi)國(guó). Android的架構(gòu)與應(yīng)用開(kāi)發(fā)研究[M].湖南《計(jì)算機(jī)與現(xiàn)代化》2008,11.

      [3] 李剛. 瘋狂Android講義(第2版).電子工業(yè)出版社,2013,3.

      [4] 景寶玉.2010中國(guó)移動(dòng)應(yīng)用開(kāi)發(fā)現(xiàn)狀與趨勢(shì)大調(diào)查,2011.

      [5] ITEYE.技術(shù)網(wǎng)站. http://www.iteye.com/

      [6] JavaEE.技術(shù)社區(qū).http://www.j2eedv3.com/

      猜你喜歡
      編碼
      編碼中心(一)
      中國(guó)編碼APP
      基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達(dá)圖像配準(zhǔn)
      《全元詩(shī)》未編碼疑難字考辨十五則
      子帶編碼在圖像壓縮編碼中的應(yīng)用
      電子制作(2019年22期)2020-01-14 03:16:24
      Genome and healthcare
      琼中| 广南县| 金阳县| 安义县| 星子县| 天峻县| 东平县| 喀什市| 钟祥市| 扎鲁特旗| 紫金县| 瑞金市| 南部县| 庆元县| 吉林省| 汶上县| 大同市| 栖霞市| 屏山县| 水富县| 法库县| 朝阳市| 民权县| 和政县| 石柱| 鹤壁市| 盐津县| 镇赉县| 大石桥市| 武定县| 揭西县| 仪陇县| 呼伦贝尔市| 河津市| 岚皋县| 遂宁市| 丹江口市| 耒阳市| 孟津县| 平谷区| 漳州市|