Не думаю, что вы думаете об этом, но в значительной степени. Сериализация в Java - довольно непрозрачный процесс. Все, что вам действительно нужно знать о нем, это предположить, что класс и все типы его членов реализуют Serializable
, Java знает, как преобразовать его в поток байтов и как воссоздать экземпляры объектов из этого поток, когда вы просите его десериализовать.
Исходя из C ++, сначала это казалось черной магией. Я скептически относился ко всему процессу и не очень доверял JVM, чтобы позаботиться об этом за меня, потому что в C ++ он просто не знает достаточно о простом объекте, чтобы сделать это. Но на самом деле это очень хорошо, если вам нужен только доступ к данным из Java.
По сути, нет необходимости беспокоиться о указателях или о том, какой алгоритм он использует ниже. Вы просто указываете ему написать объект, а затем позже говорите ему прочитать его обратно, и вы по сути получите ту же структуру в памяти, что и раньше.
Еще одна вещь: если вы объявите переменную как transient
, она не будет сохранена, и вам придется восстанавливать ее самостоятельно. Это полезно, если у вас есть поля, которые кэшируют определенные значения, для которых вы не хотите тратить пространство, или поля с конфиденциальными данными, которые вы не хотите лежать. Но вам придется помнить, чтобы восстановить его самостоятельно.