Что такое сериализация объекта?

372
задан jacktrades 11 October 2012 в 12:32
поделиться

6 ответов

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

390
ответ дан TarkaDaal 23 November 2019 в 00:04
поделиться

Можно думать о сериализации как о процессе преобразования экземпляра объекта в последовательность байтов (который может быть двоичным или не в зависимости от реализации).

очень полезно, когда Вы хотите передать данные объектов по сети, например, от одной JVM до другого.

В Java, механизм сериализации встроен в платформу, но необходимо реализовать сериализуемый интерфейс для создания объекта сериализуемым.

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

Наконец можно переопределить механизм по умолчанию и обеспечить собственное; это может подойти в некоторых особых случаях. Чтобы сделать это, Вы используете один из скрытые функции в java.

важно заметить, что то, что сериализируется, является "значением" объекта, или содержанием, а не определением класса. Таким образом методы не сериализируются.

Вот очень простой образец с комментариями для упрощения его чтения:

import java.io.*;
import java.util.*;

// This class implements "Serializable" to let the system know
// it's ok to do it. You as programmer are aware of that.
public class SerializationSample implements Serializable {

    // These attributes conform the "value" of the object.

    // These two will be serialized;
    private String aString = "The value of that string";
    private int    someInteger = 0;

    // But this won't since it is marked as transient.
    private transient List<File> unInterestingLongLongList;

    // Main method to test.
    public static void main( String [] args ) throws IOException  { 

        // Create a sample object, that contains the default values.
        SerializationSample instance = new SerializationSample();

        // The "ObjectOutputStream" class has the default 
        // definition to serialize an object.
        ObjectOutputStream oos = new ObjectOutputStream( 
                               // By using "FileOutputStream" we will 
                               // Write it to a File in the file system
                               // It could have been a Socket to another 
                               // machine, a database, an in memory array, etc.
                               new FileOutputStream(new File("o.ser")));

        // do the magic  
        oos.writeObject( instance );
        // close the writing.
        oos.close();
    }
}

, Когда мы запускаем эту программу, файл "o.ser" создается, и мы видим то, что произошло позади.

, Если мы изменяем значение: someInteger к, например Целое число. MAX_VALUE, мы можем сравнить вывод для наблюдения, каково различие.

Вот снимок экрана, показывающий точно что различие:

alt text

можно ли определить различия?;)

в сериализации Java существует дополнительное соответствующее поле: serialversionUID, но я предполагаю, что это уже слишком длинно для покрытия его.

388
ответ дан codeforester 23 November 2019 в 00:04
поделиться

Сериализация берет "живой" объект в памяти и преобразовывает ее в формат, который может быть сохранен где-нибудь (например, в памяти, на диске) и позже "десериализовал" назад в живой объект.

21
ответ дан Tim Cooper 23 November 2019 в 00:04
поделиться

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

http://en.wikipedia.org/wiki/Serialization

6
ответ дан Cheese Daneish 23 November 2019 в 00:04
поделиться

Сериализация является процессом превращения объекта Java в массив байтов и затем обратно в объект снова с его сохраненным состоянием. Полезный для различных вещей как отправка объектов по сети или кэшированию вещей к диску.

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

2
ответ дан Community 23 November 2019 в 00:04
поделиться

Я предложу аналогию для потенциальной помощи в укреплении концептуальной цели/практичности сериализация объекта / десериализация .

я воображаю сериализация объекта / десериализация в контексте попытки переместить объект через штормовой дренаж. Объект по существу "анализируется", или сериализировал в большее количество модульных версий себя - в этом случае, ряд байтов - для эффективно предоставления прохождения через носитель. В вычислительном смысле мы могли просмотреть путь, перемещенный байтами через штормовой дренаж, как являющийся сродни байтам, перемещающимся через сеть. Мы преобразовываем наш объект для приспосабливания более желательному режиму транспортировки или формату. Сериализованный объект будет обычно храниться в двоичном файле, который может позже быть считан из, записан в, или оба.

, Возможно, после того как наш объект может проскользнуть через дренаж как анализируемый ряд байтов, мы можем хотеть сохранить то представление объекта как двоичные данные в базе данных или жестком диске. Основная еда на дом, хотя, то, что с сериализацией/десериализацией, у нас есть опция позволить нашему объекту остаться в, он - двоичная форма, будучи сериализированным, или "получите" исходную форму объекта путем выполнения десериализации.

0
ответ дан 23 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

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