本文对文本阅读器做一定的探讨。

提到文本阅读,首先想到的一定是书籍。那么,就先研究一下书籍。

书籍是什么数据结构呢?三维数组。每一页看成看成X行Y列的二维数组。一本书就是由一页一页组成,就像三维数组由二维数组组成。不过我们也能这样思考将书籍一页一页的撕开(每页只有一面由文字),平铺,这不正是二维数组吗?

想到了二维数组这一点,我们还需对字符编码进行思考。若文件是以GBK编码,需要分清字符是一个字节还是两个字节。更重要的是要对控制字符处理。

那么试着编码。遍历文件,对字符进行处理。写入二维数组中。由于无法得知所需二维数组的大小,可以用链表,链接二维数组。遍历以后,想要控制输出字符,向上一行,先下一行等的编码难度几乎为零。不过该程序的缺点显著,若文件巨大,读取的时间会太长,影响阅读的心情。可以在本程序的基础之上,改进。开始并不遍历文件,而是在读到时加载文件,加入到链表中。此处链表的优势再次显现。

以上程序用的是显式的二维数组,还有一种是隐式的二维数组。便是做标记,标记二维数组每一行的开始位置。由于做标记,并为读出字符,需要大量的跳转。所以我们可以读入文件的内容,提高跳转速度。做标记同上可以一次遍历,也可读到时读取。程序的复杂度近乎为零。

在此处我要介绍less命令的源码。

less在读到文件时加载文件块。用哈希表查找文件块,链表遍历。文件块方面,提供了向前读字符,向后读字符,跳转等功能。

input.c文件中提供了想前读一行,向后读一行获取标记的功能。向前一行的算法大致为跳到前一句的前一句的‘\n’处,或文件开始出。标记位置,在向后,直到到达以前那一行。

程序的主体是一张位置表,通过向前,向后,改变表,再根据表获取字符,输出。

计算机,编码,文本阅读器 二相关推荐

  1. 计算机,编码,文本阅读器 一

    计算机的发明改变了世界,也改变了图书行业.书籍的买卖被下载取而代之.几百万字的文字被存取到几MB的文本文件中.一个小小的32GB的U盘,可以存放一个小型图书馆的书籍.当人们闲暇之时,掏出手机,打开电脑 ...

  2. Android文本阅读器,SD卡文本阅读

    文本阅读器,区别于小说阅读器,不能读取大容量的文件.文件容量过大,就会导致读取的速度变得很慢. 读取一个文本文件需要使用BufferedReader + FileReader来逐行读取内容. 还需要准 ...

  3. Android 文本阅读器源代码 学习

    1 来源 http://www.apkbus.com/android-83021-1-1.html 从这个地方下载了一个android 文本阅读器,比较简单,稍微分析以下. 2 代码不是很难,记录以下 ...

  4. 文本阅读器(txt reader) v0.3.1 linux bt

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  5. Symbol Mc1000 Text文本阅读器整体代码

    using System; using System.ComponentModel; using System.Data; using System.Drawing; using System.Tex ...

  6. 开博记念及附上第一个android工程:Txt文本阅读器

    开博记念 因工作需要学习安卓,对于安卓又完全是从零开始,故在这里记下学习总结,以记录学习工作中遇到的问题和解决办法.  由于有C++和C#基础,博主先是花了三天时间过了下JAVA的基本语法,然后就开始 ...

  7. TxtView 手机文本阅读器

    TxtView 手机文本阅读器 近来,在业余时间学习JAVA编程,写了一个阅读器.希望大家也能够喜欢.有需要的QQ:187399669图片没传上来.:( 介绍一下: 支持TXT(UTF-8)格式文本文 ...

  8. java读取文本文件从第二行_Java:我不明白为什么文本阅读器开始从第二行读取文本...

    我不是为什么我的代码跳过txt文件的第一行.我'困惑,因为这个代码是在第一次工作正常... 下面是代码:因为你的第一个if(br.readLine() == null){这个地方,你告诉你的文件阅读器 ...

  9. 代码文本阅读器,虚拟机,linux

    软件挑选原则:稳定,用户多,开源为佳 代码文本阅读器:Notepad++ 优点:简单,多能,优秀 虚拟机:VMware系列 优点:用户较多,系统稳定 linux:Ubuntu 优点:用户较多,系统稳定 ...

最新文章

  1. 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队
  2. CriminalIntent项目的强大完善
  3. 2 172.02 php,kafka安装、相关命令以及PHP使用
  4. 静态分配和动态分配内存的区别
  5. 知识工程.Vs.软件构架,框架,设计模式.
  6. 普通路由器封QQ 2010
  7. 【语义分割】CVPR2021_Rethinking BiSeNet For Real-time Semantic Segmentation
  8. js控制语句练习(回顾)
  9. 《JS权威指南学习总结--6.1原型》
  10. 【2017年第3期】开放政府环境下医药公司与医生之间的价值转移
  11. 大数据:技术与应用实践指南_大数据技术与应用社团 社会实践总结篇
  12. 轻量化版本优于MobileNet系列 | Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet
  13. 二元函数极限知识点总结
  14. 2021DASCTF实战精英夏令营暨DASCTF July X CBCTF 4th -- WP [pwn]
  15. SaaS企业如何构建与自身增长目标相匹配的市场力?
  16. Chrome浏览器首次打开后未响应较长时间
  17. 错误: 找不到或无法加载主类的解决办法
  18. laravel 浏览器谷歌network返回报错html
  19. Dockerfile unable to access ‘.git/‘: Failed to connect to gitlab.com
  20. 国家统计局举办开放日 称将迎接“大数据”挑战

热门文章

  1. DAMA认证|数据治理和数字化的12项原则
  2. JS网页特效实例:禁止网页放入框架
  3. SKILLCAD v41R Linux64 1CD+Keyshot Pro v7.0.438
  4. 众昂矿业刘金海:我国萤石进出口现状解析
  5. [附源码]计算机毕业设计springboot驾校预约管理系统
  6. 基于Java+Swing+Mysql实现汽车信息管理系统
  7. 水桶服务器的作用,我的世界水桶服务器是什么 我的世界水桶服务器怎么制作...
  8. Linux 测速(使用SpeedTest)
  9. 共度鸿蒙什么意思,逐月情缘游戏-逐月情缘手游官网最新版预约 v 1.0-apk3安卓网...
  10. Java+JSP基于ssm广州市家教中介服务网站-计算机毕业设计