Что такое сериализация объектов? - PullRequest
357 голосов
/ 15 января 2009

Что подразумевается под «сериализацией объекта»? Можете ли вы объяснить это с некоторыми примерами?

Ответы [ 13 ]

2 голосов
/ 17 декабря 2015

Возвращает файл как объект: http://www.tutorialspoint.com/java/java_serialization.htm

        import java.io.*;

        public class SerializeDemo
        {
           public static void main(String [] args)
           {
              Employee e = new Employee();
              e.name = "Reyan Ali";
              e.address = "Phokka Kuan, Ambehta Peer";
              e.SSN = 11122333;
              e.number = 101;

              try
              {
                 FileOutputStream fileOut =
                 new FileOutputStream("/tmp/employee.ser");
                 ObjectOutputStream out = new ObjectOutputStream(fileOut);
                 out.writeObject(e);
                 out.close();
                 fileOut.close();
                 System.out.printf("Serialized data is saved in /tmp/employee.ser");
              }catch(IOException i)
              {
                  i.printStackTrace();
              }
           }
        }

    import java.io.*;
    public class DeserializeDemo
    {
       public static void main(String [] args)
       {
          Employee e = null;
          try
          {
             FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn);
             e = (Employee) in.readObject();
             in.close();
             fileIn.close();
          }catch(IOException i)
          {
             i.printStackTrace();
             return;
          }catch(ClassNotFoundException c)
          {
             System.out.println("Employee class not found");
             c.printStackTrace();
             return;
          }
          System.out.println("Deserialized Employee...");
          System.out.println("Name: " + e.name);
          System.out.println("Address: " + e.address);
          System.out.println("SSN: " + e.SSN);
          System.out.println("Number: " + e.number);
        }
    }
2 голосов
/ 15 января 2009

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

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

1 голос
/ 03 июня 2017

| * | Сериализация класса: преобразование объекта в байты и байты обратно в объект (десериализация).

class NamCls implements Serializable
{
    int NumVar;
    String NamVar;
}

| => Object-Serialization - это процесс преобразования состояния объекта в пару байтов.

  • | -> Реализуйте, когда вы хотите, чтобы объект существовал вне времени жизни JVM.
  • | -> Сериализованный объект может храниться в базе данных.
  • | -> Сериализуемые объекты не могут быть прочитаны и поняты людьми, поэтому мы можем добиться безопасности.

| => Объектная десериализация - это процесс получения состояния объекта и сохранения его в объекте (java.lang.Object).

  • | -> Перед сохранением своего состояния он проверяет, совпадают ли входной файл / сеть формы serialVersionUID с файлом serialVersionUID .class.
    Если не выбрасывать java.io.InvalidClassException.

| => Объект Java сериализуем только в том случае, если его класс или какой-либо из его суперклассов

  • реализует либо интерфейс java.io.Serializable, либо
  • его подинтерфейс, java.io.Externalizable.

| => Статические поля в классе не могут быть сериализованы.

class NamCls implements Serializable
{
    int NumVar;
    static String NamVar = "I won't be serializable";;
}

| => Если вы не хотите сериализовать переменную класса, используйте ключевое слово transient

class NamCls implements Serializable
{
    int NumVar;
    transient String NamVar;
}

| => Если класс реализует сериализуемый, то все его подклассы также будут сериализуемыми.

| => Если у класса есть ссылка на другой класс, все ссылки должны быть сериализуемыми, иначе процесс сериализации не будет выполнен. В этом случае
NotSerializableException генерируется во время выполнения.

...