是否可以持久存储样式文本?

时间:2015-03-22 15:31:18

标签: java swing serialization data-persistence

所以我尝试使用DefaultStyledDocument序列化一些XMLEncoder个对象。它们编码很好,但是当我查看数据时,它不会对任何实际数据进行编码,它只是给出了类文件。我看过互联网,看到很多人都遇到了这个问题,但没有任何有用的解决方案。我看到的最佳答案是“DefaultStyledDocument不是一个合适的bean,所以它不起作用。”

那么,无论如何我可以序列化DefaultStyledDocuments,而不必处理版本之间的问题?二进制文本和文本都可以接受。

以下是我想要做的一些示例代码:

DefaultStyledDocument content = new DefaultStyledDocument();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
XMLEncoder encoder = new XMLEncoder(stream);
encoder.writeObject(content);
encoder.close();
stream.toString(); //This is the result of the encoding, which should be able to be decoded to result in the original DefaultStyledDocument

我真的不在乎我是否使用XMLEncoder或其他方法,它只需要工作。

1 个答案:

答案 0 :(得分:0)

无需使用XMLEncoder对文档进行编码。作为Swing Text API的一部分,EditorKits为您完成这项工作。基类级别EditorKit具有read()write()方法。然后,这些方法通过各种子EditorBits进行扩展,以允许读取和写入文档。大多数文档都有自己的EditorKits,允许程序员读取或写入Document。

然而,StyledEditorKit(DefaultStyledDocument' s"拥有" EditorKit)并不容易阅读或写作。您需要使用RTFEditorKit,它支持读写。但是,Swing的内置RTFEditorKit不能很好地工作。所以有人设计了一个免费的" Advanced"编辑器套件here。要使用AdvancedRTFEditorKit编写DefaultStyledDocument,请使用以下代码(变量content是DefaultStyledDocument)。

AdvancedRTFEditorKit editor = new AdvancedRTFEditorKit();
Writer writer = new StringWriter();
editor.write(writer, content, 0, content.getLength());
writer.close();
String RTFText = writer.toString();

可以使用类似的过程使用RTFEditorKit的read()方法读取RTFDocuments。