Можно ли хранить стилизованный текст постоянно?

Поэтому я пытался сериализовать некоторые объекты DefaultStyledDocument с помощью XMLEncoder. Они прекрасно кодируют, однако, когда я смотрю на данные, они не кодируют какие-либо данные, а просто дают файл класса. Я посмотрел в Интернете и увидел, что у многих людей были проблемы с этим, но не было никаких полезных решений. Лучший ответ, который я увидел, был: "DefaultStyledDocument не является правильным компонентом, поэтому он не будет работать".

Итак, могу ли я в любом случае сериализовать 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 ответ

Решение

Нет необходимости кодировать документы с помощью XMLEncoder. EditorKits, часть Swing Text API, сделает эту работу за вас. Класс базового уровня, EditorKit, имеет read() а также write() метод. Эти методы затем расширяются с помощью различных вспомогательных редакторов, позволяющих читать и писать документы. Большинство документов имеют свои собственные комплекты EditorKits, которые позволяют программисту читать или писать документ.

Однако StyledEditorKit ("собственный" EditorKit DefaultStyledDocument) не позволяет легко читать или писать. Вам нужно использовать RTFEditorKit, который поддерживает чтение и запись. Тем не менее, встроенный в Swing RTFEditorKit работает не очень хорошо. Поэтому кто-то разработал бесплатный "Расширенный" редактор, доступный здесь. Чтобы написать DefaultStyledDocument с помощью AdvancedRTFEditorKit, используйте следующий код (переменная content является DefaultStyledDocument).

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

Аналогичный процесс может быть использован для чтения RTFDocuments с RTFEditorKit's read() метод.

Другие вопросы по тегам