我有疑问,我正在 java 中进行序列化如果我打开两个 JVM 实例,请告诉我,假设我在两个不同的位置打开了两个不同的 eclipse 工作空间,并且在一个工作空间中我创建了序列化程序具有 .ser 扩展名的文件中的对象并通过另一个工作区我创建了程序以通过读取该 .ser 文件来反序列化对象。
现在请告知该对象会在不同的 JVM 实例中反序列化吗?问题围绕着这样一个事实,即在同一 JVM 实例中对对象进行序列化和反序列化是强制性的……!!
我有疑问,我正在 java 中进行序列化如果我打开两个 JVM 实例,请告诉我,假设我在两个不同的位置打开了两个不同的 eclipse 工作空间,并且在一个工作空间中我创建了序列化程序具有 .ser 扩展名的文件中的对象并通过另一个工作区我创建了程序以通过读取该 .ser 文件来反序列化对象。
现在请告知该对象会在不同的 JVM 实例中反序列化吗?问题围绕着这样一个事实,即在同一 JVM 实例中对对象进行序列化和反序列化是强制性的……!!
序列化是我们可以将对象的状态存储到任何存储介质中的过程。我们可以将对象的状态存储到文件、数据库表等中。反序列化是序列化的相反过程,我们从存储介质中检索对象。
Eg1:假设您有一个 Java bean 对象并且它的变量有一些值。现在您想将此对象存储到文件或数据库表中。这可以使用序列化来实现。现在,您可以在需要时随时从文件或数据库中再次检索该对象。这可以使用反序列化来实现。
**Serialization Example:**
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("employee.ser");
ObjectOutputStream out =
new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
}catch(IOException i)
{
i.printStackTrace();
}
**Deserializing an Object:**
The following DeserializeDemo program deserializes the Employee object created in the SerializeDemo program. Study the program and try to determine its output:
Employee e = null;
try
{
FileInputStream fileIn =
new FileInputStream("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);
Java 序列化格式是标准化的。任何 JVM 都可以读写它。
字节流可能略有不同(例如,序列化程序可能以不同的顺序写入某些对象;如果您int
在一个类中有两个字段,则它们的写入顺序无关紧要)。
但反序列化的结果将始终相同,除非您更改了存储在字节流中的类的 Java 代码。