Сериализация Java работает на циклические ссылки?

Библиотеки и платформы, упомянутые здесь, хороши, но если все, что Вы хотите сделать, заполняют форму и сглаживают его, я рекомендую инструмент командной строки, названный pdftk (Инструментарий PDF).

Видят https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit /

, можно назвать командную строку от php, и команда

pdftk formfile.pdf fill_form fieldinfo.fdf output outputfile.pdf flatten

, необходимо будет найти формат файла FDF для генерации информации для заполнения полей. Вот хорошая ссылка для этого:

http://www.tgreer.com/fdfServe.html

[Редактирование: вышеупомянутая ссылка, кажется, вне комиссии. Вот еще некоторая информация...]

, команда pdftk может генерировать файл FDF из файла формы PDF. Можно тогда использовать сгенерированный файл FDF в качестве образца. Поля формы являются частью файла FDF, который похож

...
<< /T(f1-1) /V(text of field) >>
<< /T(f1-2) /V(text of another field) >>
...

, Вы могли бы также проверить php-pdftk, который является библиотекой, характерной для PHP. Я не использовал его, но комментатор ГЃlvaro (ниже) рекомендует его.

16
задан Brandon 24 November 2009 в 19:50
поделиться

4 ответа

Да, сериализация Java по умолчанию работает для циклических ссылок. Когда вы сериализуете объект C, поле будет содержать обратную ссылку на уже сериализованный объект A вместо его повторной сериализации.

18
ответ дан 30 November 2019 в 21:54
поделиться

Да, это так.

Я провел этот очень, очень простой тест и по крайней мере завершил сериализацию. Я предполагаю, что это правильно, но вы можете проверить это с помощью некоторых дополнительных строк.

import java.io.*;
class A implements Serializable { B b; }
class B implements Serializable { C c; }
class C implements Serializable { A a; }
class Test {
    public static void main( String [] args ) throws IOException {
        A a = new A();
        a.b = new B();
        a.b.c = new C();
        a.b.c.a = a;
        new ObjectOutputStream( new ByteArrayOutputStream( ) ).writeObject( a );
        System.out.println("It works");

    }    
}
2
ответ дан 30 November 2019 в 21:54
поделиться

Да, сериализация Java работает для циклических ссылок, прочтите здесь , чтобы получить дополнительную информацию, которая поможет вам понять, что может делать сериализация Java.

3
ответ дан 30 November 2019 в 21:54
поделиться

Фактически вы можете просмотреть ссылки из первых рук, если вы сериализуйте свой объект в XML. Дочерние объекты сериализуются только один раз. Любая ссылка (где угодно в сериализованной структуре) на дочерний объект, который уже был сериализован, будет просто указывать на этот объект в файле.

Однако сериализация циклических ссылок может стать немного беспорядочной, поэтому вы можете избежать их, если вы можете.

0
ответ дан 30 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: