gpt4 book ai didi

java - 在任意位置编辑的基于文本的文件的高效设计?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:35 24 4
gpt4 key购买 nike

我正在尝试开发一个允许实时协作的简单在线编辑器(用 Java 编写)。在此编辑器中,我希望客户能够在任意点编辑源代码(例如,将字母“d”添加到源代码文件第 11 行第 20 列)。我不确定如何以有效的方式设计这些源代码文件对象,同时仍然允许逐个字母的客户端-服务器同步(类似于 Google Docs 的工作方式)。

我考虑过使用 RandomAccessFile,但在阅读 this post 之后,我认为这不是一种有效的方法。在文件开头附近插入一个字母将涉及更改其后的所有内容。

我目前的计划是使用 StringBuilder 对象及其插入/删除/附加方法来表示服务器和客户端上的源文件。在服务器端,此 StringBuilder 将根据需要转换为实际文件。

我很好奇是否有更好的方法来解决这个问题。有什么想法吗?

最佳答案

你会想要类似 Ropes 的东西作为基础数据结构。这将启用 O(log n) 编辑、插入、追加、串联等,因此您无需担心大型数据结构中间的编辑。

要考虑的两个开源库:

除此之外,您还需要构建用于合并和发布同步更改的逻辑。这实际上是棘手的部分:您需要决定解决冲突等的逻辑以及如何将“增量”传输给客户端。

我会将持久性/复制到永久存储视为一个单独的问题 - 最好先让内存中的数据结构正常工作。然后在周期性的时间点,您可以将数据刷新到持久存储中。我建议像 Git 这样的东西, 或者如果你特别喜欢冒险,你可以尝试像 Datomic 这样的东西(它本质上是一个像 Git 一样工作的数据库,并保留所有更新的历史记录)

关于java - 在任意位置编辑的基于文本的文件的高效设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com