APP下载

浅析基于Android的大文本阅读器

2014-04-29周一帆

电脑迷 2014年9期
关键词:编码

周一帆

摘 要 Android是市场占有率最大的一个平台,Android平台下的APP也各式各样,各种各样的文本阅读器也随之产生。传统IO流与NIO流相差甚大,但在JDK 1.4 中原来的 I/O 包和 NIO 已经很好地集成了,所以即使采用传统IO流的方式读取速度也不会相差很大。读取方式需要采取分块读取的方式,否则会很占内存。文本阅读器还需要解决的问题有编码问题,一个好的文本阅读器应该支持多种编码格式的文本。

关键词 Android IO 文本阅读器 编码

中图分类号:TP3 文献标识码:A

现如今,移动市场发展十分迅速,而Android是移动市场中所占比例最大的一个平台。截至2013年年底,Android的市场占有率从2012年的68.8%提升至78.9%,而苹果的IOS则从2012年的19.4%下降到15.5%,Microsoft的Windows Phone则从2.7%上升到3.6%。可以看出,在智能手机市场已经接近饱和的情况下,IOS平台和WP平台小幅波动下,Android平台在上升了10个百分点,实属不易。相较于IOS,Android系统比较开放,比较大众化,而且支持Android系统的手机也比较多,所以很多人愿意选择系统。

对于Android而言,Android应用程序是JAVA语言编写的。同时,对于JAVA语言而言,Android平台的出现,让JAVA语言重生,因为Android平台应用开发的语言就是JAVA,这让许多痴迷于APP开发的开发者们都纷纷深入了解JAVA。

Android响应速度主要指的是JVM,即JAVA 虚拟机的速度。随着各式各样的APP的风靡,文本阅读器也随处可见。对于大文本来说,文本阅读器的性能好坏就体现在响应速度上。

对于手机等移动设备来说,运行内存实在有限。所以,处理起各种应用来最需要保证的就是占用内存不能太大。而对于文本阅读器来说,如果用传统的方式去读取,然后将读取到的全部存起来,如果这个文本有1G,那么这个程序就该被列入最烂APP排行榜了。

所以,Android文本阅读器需要最解决的问题就是内存的问题。所以现在的解决方案就是,少读取到内存。但是文本阅读是一个动态的过程,没有一个开发者会知道每一个使用者每次会读多少的文本,会读多大的文本。所以必须有一个合适的算法,来进行对这个未知的文本进行读取。

对于JAVA而言,读取文件需要的就是IO流。在J2SE1.4以上版本中发布了全新的I/O类库,即NIO包。选取使用哪种IO流对文本阅读器的速度也有很大的影响。在传统I O流是面向流的,就是说这种流真的像流水一般,过去了就不能往回流。而NIO是面向缓冲的,它读到的数据会存到一个缓冲区里。有了这个缓冲区事情就好办了,必要的时候,它可以在缓冲区里前后移动。这就使得流使用起来方便了许多。除此之外,传统IO流都是阻塞的,当一个线程调用了读或者写的方法的时候,该线程就会阻塞,直至数据完全取得或者数据完全写入。这就降低了效率,而NIO是非阻塞的。当该线程启动了流之后,该线程不需要等待数据完全取得或者完全写入,就可以执行其他的操作。经过不完全准确测试,读取一个10M的文本,使用NIO的所需要的平均时间为2秒,而使用传统IO则平均需要3秒。

但在JDK1.4中原来的I/O包和NIO已经很好地集成了。java.io.* 已经以 NIO 为基础重新实现了,所以现在它可以利用 NIO 的一些特性。这使得传统IO虽然面向流,但是处理速度提高了不少。

这个时候还会遇到的一个问题是编码问题,文档的编码方式有很多,一个文本阅读器应支持多种编码。解决编码问题的方式有多种,可以通过读取文件头来判断。对于txt文档来说,如果只需要支持UTF-8,Unicode和GBK的话,只需要读取文件的头两个字节就可以了。网上也有一些开源的判断编码的jar包,比如说cpdetector.jar等。但是读取文件头是一种很不错的选择,因为相较于调用开源的jar包,读取文件头的方式十分快速。

再回到分块读取的问题上来。无论采用哪种流进行分块读取,定位都是一个很棘手的问题,比如说以字节读取,那么就要根据编码来处理定位,否则就会出现乱码。如果直接读取字符,比如说BufferedDRead里面的readline()方法。根据这种方法读取虽然不会出现乱码的问题,但是定位起来相当麻烦。但是采用内存映射还是一种不错的方法。

一个文本阅读器的实现方法有很多种,基于Android的文本阅读器需要考虑的最基本问题就是以上提出的用哪种流,如何编码以及如何定位问题。

参考文献

[1] 熊健.基于Android平台的企业移动应用开发框架的分析与设计[J].软件,2012,33(11).

[2] 姚昱曼,刘卫国. Android的架构与应用开发研究[M].湖南《计算机与现代化》2008,11.

[3] 李刚. 疯狂Android讲义(第2版).电子工业出版社,2013,3.

[4] 景宝玉.2010中国移动应用开发现状与趋势大调查,2011.

[5] ITEYE.技术网站. http://www.iteye.com/

[6] JavaEE.技术社区.http://www.j2eedv3.com/

猜你喜欢

编码
编码中心(一)
中国编码APP
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
Genome and healthcare