序列化和反序列化的重要性

时间:2017-03-03 12:47:25

标签: java serialization deserialization

有人可以讲述或分享有关序列化和反序列化重要性的一些有用链接吗?我无法理解,只是通过网络传输对象或将它们存储到我们使用序列化和反序列化或任何其他方面涉及的文件中?

2 个答案:

答案 0 :(得分:1)

序列化是将实例转换为字节的过程。现在你用这些字节做什么完全取决于你。

例如,

Hibernate 对分离的实体使用序列化。

您还可以传递一些字节(您的实例)以进行进程间通信等。

答案 1 :(得分:1)

您可以查看Source

Java提供了一种称为对象序列化的机制,其中对象可以表示为包含对象数据的字节序列,以及有关对象类型和存储的数据类型的信息。对象。

将序列化对象写入文件后,可以从文件中读取并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。

最令人印象深刻的是整个流程与JVM无关,这意味着可以在一个平台上对对象进行序列化,并在完全不同的平台上进行反序列化。

注 - 将对象序列化为文件时,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();
  }


 }
}

反序列化的示例

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