java-在任意位置进行编辑的基于文本的文件的高效设计?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-在任意位置进行编辑的基于文本的文件的高效设计?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1316字,纯文字阅读大概需要2分钟。
内容图文
![java-在任意位置进行编辑的基于文本的文件的高效设计?](/upload/InfoBanner/zyjiaocheng/676/d57d2e85a4574a85bbac8564e7aa05c7.jpg)
我正在尝试开发一个简单的在线编辑器,以实现实时协作(用Java编写).在此编辑器中,我希望客户端能够在任意位置编辑源代码(例如,将字母“ d”添加到源代码文件的第11行第20列).我不确定如何以有效的方式设计这些源代码文件对象,同时仍允许逐个字母的客户端-服务器同步(类似于Google Docs的工作方式).
我考虑过使用RandomAccessFile,但是在读取this post之后,我认为这不是一种有效的方法.在文件开头附近插入字母会涉及更改文件后的所有内容.
我目前的计划是使用StringBuilder对象及其插入/删除/追加方法来表示服务器和客户端上的源文件.在服务器端,此StringBuilder将根据需要转换为实际文件.
我很好奇是否可能有更好的方法来解决此问题.有任何想法吗?
解决方法:
您将需要像Ropes这样的基本数据结构.这将启用O(log n)编辑,插入,追加,串联等操作,因此您无需担心大型数据结构中间的编辑.
要考虑的两个开源库:
> Java绳索:http://ahmadsoft.org/ropes/
>我自己的不可变“文本”数据结构实现:https://github.com/mikera/mikera/blob/master/src/main/java/mikera/persistent/Text.java
最重要的是,您将需要构建用于合并和发布同步更改的逻辑.这实际上是棘手的部分:您需要确定解决冲突等的逻辑,以及如何向客户端传输“增量”.
我将持久性/复制到永久性存储作为一个单独的问题-最好首先使所有内容与内存中的数据结构一起正常工作.然后,您可以定期将数据刷新到永久性存储中.我建议使用诸如Git之类的东西,或者如果您特别喜欢冒险,可以尝试诸如Datomic之类的东西(它实际上是一个像Git一样工作的数据库,并保留所有更新的历史记录)
内容总结
以上是互联网集市为您收集整理的java-在任意位置进行编辑的基于文本的文件的高效设计?全部内容,希望文章能够帮你解决java-在任意位置进行编辑的基于文本的文件的高效设计?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。