前言
这两天研究了下txt小说阅读器,尝试实现了下,过程中遇到了一些问题还是值得记录的。
项目已上传GitHub,项目地址
问题与思考
1.文件读取问题
1.1网络小说的文件都很大,几百万上千万字数的很常见,那么在读取的时候,便会出现越到后面的内容读取越慢,那么如何更快的读取的呢?
这里的处理是将文件拆分为若干小文件,每个文件最大存储的字符数设置一个值,如30000,这样,一个几百万的txt文件可以分成一百多个小文件,每个小文件只有30000字符数或不到,拆分时记录每个小文件的头字符后最后一个字符在大文件的位置,在获取大文件的某个位置的字符时,可以通过这些信息,计算到读取哪个小文件以及小文件内的字符位置,这样文件读取从大文件转换到小文件,读取速度得到提升。
1.2即使分为若干小文件加速文件读取,但当界面绘制频繁时,文件读取次数会上升,相应的界面就会出现不流畅,那么如何解决呢?
这里的处理是会将正在展示的章节和临近的章节进行弱引用的方式缓存,这样在缓存数据没有被回收时,可以更快速的访问以及减少文件IO操作。
1.3上面提到的分段处理以及章节处理,这些都会产生列表信息,当再次使用时,如何查询某个信息?
因为产生的列表信息都是有序的,采用二分查找的方式进行检索,不要使用遍历的方式,不然到后面也会增加查询时间。
2.内容展示问题
2.1 一些章节内容是连接起来的,这会造成一页内容展示了两章内容,没有明确的章节分开,如何处理?
若要章节分开,那么在生成每页数据的时候,添加当前字符是否是章节开始字符的判断,若是,则该页数据边读到这里,不在添加下章内容,这样在每章结尾就会有明显的分割。
结语
这是这两天实现的功能中留下的比较深刻的问题与解决思路,以留记录。