论坛首页 Java企业应用论坛

java开发大文件编辑器的解决方案

浏览 8041 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-07-16   最后修改:2010-07-16
yf6230065 写道
xdsnet 写道
其实直接采用按字节分页编辑不是更好?
我想大多数文本编辑器都会是这样的,而不是按行分页吧!

我一开始做的就是按字节分页``但在实际中滚动条不好控制每次滚动显示文字的量,
可能是我考虑的不周全。我了解过几个C#的项目,他们采用的是按行数分块,这样可以固定显示文件的行。。所以我才想到按行分页``


没有必要用行数。如果你的窗口的长度和高度是动态的,可以计算一下满屏的字符数量,即使这样也不会太多。建立一个缓存区,多余的字符可以隐藏起来。既然你能计算全屏的字符数量,那么一行的最大字符数量也可计算出来。在滚动的时候,行数还是可以计算的。

至于修改,可以保存为零时碎片(内存和外存看需要决定,vim使用的零时文件作为缓存),当次修改前,记录下上一次修改后的区域范围。那么每一次修改都在一个“修改链表”中保存。有利于实现UNDO和REDO操作。

建议使用Java中java.io.RandonAccessFile,它也是native操作,性能没有问题,如果可能的话,利用FileChannel性能更好。

0 请登录后投票
   发表时间:2010-07-16  
谢谢楼上的建议,问题已经基本解决了,我采用的字节分页,然后对每一页的开头和结尾部分进行了处理。在打开文件时,给每块和每行创建索引,在显示文件的时候,定位每行在每页的位置,就完成了快速的显示。
mercyblitz 的建议我考虑过,需要对文件进行补齐操作,因为我显示的数据并不是占满全屏的,一开始我打算把每行用"/0",但我感觉写入文件耗时更多·所以就放弃了这个方案, 你的保存方法方案我得借鉴一下。。。谢谢
0 请登录后投票
   发表时间:2010-07-16  
yf6230065 写道
谢谢楼上的建议,问题已经基本解决了,我采用的字节分页,然后对每一页的开头和结尾部分进行了处理。在打开文件时,给每块和每行创建索引,在显示文件的时候,定位每行在每页的位置,就完成了快速的显示。
mercyblitz 的建议我考虑过,需要对文件进行补齐操作,因为我显示的数据并不是占满全屏的,一开始我打算把每行用"/0",但我感觉写入文件耗时更多·所以就放弃了这个方案, 你的保存方法方案我得借鉴一下。。。谢谢


你这样类似于一套协议,做了Head和Body部分,呵呵。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics