首页编程java编程java 对象序列化是什么意思(java 中的序列化是什么意思)

java 对象序列化是什么意思(java 中的序列化是什么意思)

编程之家2023-10-1295次浏览

大家好,今天来为大家解答java 对象序列化是什么意思这个问题的一些问题点,包括java 中的序列化是什么意思也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

java 对象序列化是什么意思(java 中的序列化是什么意思)

java 谁能给我讲讲对象序列化呢

实质就是对对象的操作!!

可以把类对象保存到文件上,(这个就是序列化)

然后在需要的时候从文件里读出对象并恢复。(这个就是反序列化)

java 对象序列化是什么意思(java 中的序列化是什么意思)

当进行序列化的时候:

首先JVM会先调用writeReplace方法,在这个阶段,我们可以进行张冠李戴,将需要进行序列化的对象换成我们指定的对象.

跟着JVM将调用writeObject方法,来将对象中的属性一个个进行序列化,我们可以在这个方法中控制住哪些属性需要序列化.

java 对象序列化是什么意思(java 中的序列化是什么意思)

当反序列化的时候:

JVM会调用readObject方法,将我们刚刚在writeObject方法序列化好的属性,反序列化回来.

然后在readResolve方法中,我们也可以指定JVM返回我们特定的对象(不是刚刚序列化回来的对象).

所谓“对象序列化”:刚接触时觉得这个东西很深奥,看过以后方感其简便性,简单一句话:使用它可以象存储文本或者数字一样简单的存储对象。

具体应用:本人由于目前积累的经验还不是太多,所以想不出更好的应用场景来。比如说:程序在执行过程中突然遇到短电或者其他的故障导致程序终止,那么对象当前的工作状态也就会丢失,这对于有些应用来说是可怕的。用对象序列化就可以解决这个问题,因为它可以将对象的全部内容保存于磁盘的文件,这样对象执行状态也就被存储了,到需要时还可以将其从文件中按原样再读取出来,这样就解决了数据丢失问题!

如果您知道更多更好的应用范围可以告诉我!

怎样实现:实现就简单啦!为需要被序列化的对象实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流,说了这么多来看一个例子吧!(在JDK1.4下调试通过)

import java.io.*;

import java.util.*;

public class ObjectFileTest

{

public static void main(String[] args)

{

Manager boss= new Manager("Carl Cracker", 80000, 1987, 12, 15);

boss.setBonus(5000);

Employee[] staff= new Employee[3];

staff[0]= boss;

staff[1]= new Employee("Harry Hacker", 50000, 1989, 10, 15);

staff[2]= new Employee("Tony Tester", 40000, 1990, 1, 15);

try

{

/**

*使用文件输出流构造一个对象输出流

*FileOutputStream文件输出流

*ObjectOutputStream对象输出流

*/

ObjectOutputStream out= new ObjectOutputStream(new

FileOutputStream("employee.dat"));

out.writeObject(staff);//将对象写入"employee.dat"中

out.close();//关闭流,请牢记

/**

*使用文件输入流构造一个对象输入流

*FileInputStream文件输入流

*ObjectInputStream对象输入流

*/

ObjectInputStream in= new ObjectInputStream(new

FileInputStream("employee.dat"));

///readObject()将对象从"employee.dat"中读出,需要类型转换

Employee[] newStaff=(Employee[])in.readObject();

in.close();

for(int i= 0; i< newStaff.length; i++)

System.out.println(newStaff[i]);

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

///implements Serializable接口为标注该对象是可序列化的

class Employee implements Serializable

{

public Employee(){}

public Employee(String n, double s, int year, int month, int day)

{

name= n;

salary= s;

GregorianCalendar calendar=

new GregorianCalendar(year, month- 1, day);

hireDay= calendar.getTime();

}

public String getName()

{

return name;

}

public double getSalary()

{

return salary;

}

public Date getHireDay()

{

return hireDay;

}

public void raiseSalary(double byPercent)

{

double raise= salary* byPercent/ 100;

salary+= raise;

}

public String toString()

{

return getClass().getName()

+"[name="+ name

+",salary="+ salary

+",hireDay="+ hireDay

+"]";

}

private String name;

private double salary;

private Date hireDay;

}

class Manager extends Employee

{

public Manager(String n, double s, int year, int month, int day)

{

super(n, s, year, month, day);

bonus= 0;

}

public double getSalary()

{

double baseSalary= super.getSalary();

return baseSalary+ bonus;

}

public void setBonus(double b)

{

bonus= b;

}

public String toString()

{

return super.toString()

+"[bonus="+ bonus

+"]";

}

private double bonus;

}

java中为什么要进行对象序列化

对象的序列化就是为了数据传输,在你的代码的里是对象格式,而在传输的时候不可能还保持这对象的样子。

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为java对象。

1.概念

序列化:把java对象转换为字节序列的过程。

反序列化:把字节序列恢复为java对象的过程。

2.用途

对象的序列化主要有两种用途:

1)

把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2)

在网络上传送对象的字节序列。

java 中的序列化是什么意思

1、序列化是干什么的?

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用自己的各种方法来保存Object states,

但是Java给你提供一种应该比你自己好的保存对象状态的机制、那就是序列化。

2、什么情况下需要序列化?

a)当你想把的内存中的对象保存到一个文件或者数据库中时候。

b)当你想用套接字在网络上传送对象的时候

c)当你想通过RMI传输对象的时候(RMI->Remote Method Invocation远程方法调用)

3、当对一个对象实现序列化时,究竟发生了什么?

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实体变量(instance ariable)

例如:Foo myFoo=new Foo(); myFoo.setWidth(20); myFoo.setHeight(40);

java 中的序列化是什么意思有什么好处

1、序列化是干什么的?

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;

b)当你想用套接字在网络上传送对象的时候;

c)当你想通过RMI传输对象的时候;

3、当对一个对象实现序列化时,究竟发生了什么?

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:

Foo myFoo= new Foo();

myFoo.setWidth(37);

myFoo.setHeight(70);

当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对象。

FileOutputStream fs= new FileOutputStream("foo.ser");

ObjectOutputStream os= new ObjectOutputStream(fs);

os.writeObject(myFoo);

4、实现序列化(保存到一个文件)的步骤

a)Make a FileOutputStream

java代码

FileOutputStream fs= new FileOutputStream("foo.ser");

b)Make a ObjectOutputStream

java代码

ObjectOutputStream os= new ObjectOutputStream(fs);

c)write the object

java代码

os.writeObject(myObject1);

os.writeObject(myObject2);

os.writeObject(myObject3);

d) close the ObjectOutputStream

java代码

os.close();

5、举例说明

java代码

import java.io.*;

public class Box implements Serializable

{

private int width;

private int height;

public void setWidth(int width){

this.width= width;

}

public void setHeight(int height){

this.height= height;

}

public static void main(String[] args){

Box myBox= new Box();

myBox.setWidth(50);

myBox.setHeight(30);

try{

FileOutputStream fs= new FileOutputStream("foo.ser");

ObjectOutputStream os= new ObjectOutputStream(fs);

os.writeObject(myBox);

os.close();

}catch(Exception ex){

ex.printStackTrace();

}

}

}

6、相关注意事项

a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:

1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

2.资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分配,而且,也是没有必要这样实现。

好了,关于java 对象序列化是什么意思和java 中的序列化是什么意思的问题到这里结束啦,希望可以解决您的问题哈!

中国和朝鲜两国的界河叫什么(中国和朝鲜两国的界河是哪条)java里t是什么意思(JAVA 中&lt;t&gt;是什么意思,)