(底部的简短摘要)
你好,
我正在用Java编写一个用于检查二进制文件的工具。由于数据的格式,我无法以线性的方式解析文件。相反,我必须在整个文件中跳过很多。在检查它时,我正在填充一个数据结构,它用所需的信息对文件中的每个偏移量进行注释。所有注释都是字符串。有些应该具有不同的颜色和与它们交互的能力,例如根据类型右键单击自定义操作。
因此,基本上,我将文件解析为一个类似地图的结构,在不可预测的位置添加节点和叶子。我希望将内容显示为线性文本,并按二进制文件中的偏移量排序。当文件的其他部分仍在被解析时,用户应该能够处理已解析的内容,因此等待解析完成,然后执行线性插入不是一个选项。用户永远不会更改文本的任何部分,所以我不需要撤消操作等。
我看过Swing的文本API,我需要的一些特性似乎就在这里,例如使用不同的View对象来与一些文本进行交互。但是,我已经查看了源代码,似乎Swing文档有一个存储整个文本的底层内容类。虽然内存不是问题,但我担心在解析文档时在任意位置插入文本的性能。GapContent类(它是文档内容接口的默认实现)适用于同一位置的多个编辑,因此在任意位置插入会导致大量数组副本的发生。
我考虑了其他选项,但由于我以前从未使用过Swing的文本API,我需要一些建议,这些想法是否好:
( a)自己实现AbstractDocument.Content。问题是Swing在“虚拟”文本文件中使用偏移量,因此我必须记住Swing中的哪个偏移量属于结构中的哪个节点。在解析过程中更改结构将使这种方法变得相当复杂。
( b)实现了整个文档接口。我不确定这是否会导致与备选方案a相同的问题。
c)使用我已经拥有的结构,并为它创建一个完全自定义的Swing组件。这听起来也很复杂,因为我希望对用户有一种类似文本编辑器的感觉。但至少我不必引入虚拟文本偏移,只需为添加的每一行插入视图。
因此,简而言之:
发布于 2013-11-18 04:25:52
您可以利用WatchEvent侦听文件上的任何更改。您可以在http://docs.oracle.com/javase/tutorial/essential/io/notification.html查阅正式文档以获得详细信息。
https://stackoverflow.com/questions/20032142
复制相似问题