Latest web development tutorials

Java сериализации

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

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

Весь процесс является Java Virtual Machine (JVM) независимо, то есть, на платформе сериализовать объект может десериализации объекта на совершенно другой платформе.

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

ObjectOutputStream класс содержит много метод записи для записи различных типов данных, но специальные исключения так:

public final void writeObject(Object x) throws IOException

Описанный выше метод сериализовать объект и отправить его в выходной поток. Подобный ObjectInputStream класс содержит следующий метод десериализации объекта:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

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

Чтобы продемонстрировать сериализации Java, как это работает, я буду использовать класс Сотрудник учебника уже упоминалось выше, если мы определим следующий класс Employee, который реализует интерфейс Serializable.

public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + name
                           + " " + address);
   }
}

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

Класс должен реализовывать java.io.Serializable объект.

Все эти атрибуты должны быть сериализуемыми. Если есть свойство не сериализуемым, свойство должно быть указано на короткое время.

Если вы хотите знать, является ли сериализуемым стандартный класс Java, обратитесь к документации по этому классу. Проверьте, работают ли очень просто экземпляром класса можно сериализовать, просто нужно увидеть класс не достиг java.io.Serializable интерфейс.


Сериализованная объект

Класс ObjectOutputStream используется для сериализации объекта, SerializeDemo Следующий пример создает экземпляр объекта Employee, а объект сериализуется в файл.

После того, как эта программа выполнена, она создает файл с именем employee.ser. Эта программа не имеет выхода, но вы можете прочитать код, чтобы понять роль программы.

Примечание: Когда объект сериализуется в файл, в соответствии со стандартом конвенции Java является файл с расширением .ser.

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();
      }
   }
}

объекты Deserialize

В следующем примере программы DeserializeDemo десериализации, / TMP / employee.ser хранится объект Employee.

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);
    }
}

Скомпилировать и запустить программу выше результаты выглядят следующим образом:

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

При этом следует отметить следующие моменты:

Метод readObject () в попробовать / поймать блок попыток поймать ClassNotFoundException исключение. Для виртуальной машины Java может десериализации объект, он должен быть в состоянии найти классы байткодом. Если виртуальная машина не может найти класс в объекте процесса десериализации, бросить исключение ClassNotFoundException.

Обратите внимание, что возвращаемое значение, метод readObject () преобразуется в качестве ссылки Employee.

Когда объект сериализуется, значение свойства ССН 111 222 333, а потому, что свойство коротка, значение не передается в выходной поток. Так ПЛА атрибут Десериализованный объект Сотрудник 0.