java-求助,Java中对象序列化的作用是什么?

问题描述

求助,Java中对象序列化的作用是什么?

Java中对象序列化的作用是什么?求大神相助,希望能全面一点哦。急求大神解答

解决方案

简单来说,对象像一颗树,里面有字段,如果字段是类型,那么它还有自己的字段。
但是网络传输、保存文件,都必须是线性的,连续的。
序列化就是把这棵树拍扁,成为一个序列的过程。
反序列化就是从一个序列中重新把这颗树拉回来的过程。

解决方案二:

把一个对象,转成流数据,对方根据这个数据还原成初始对象,适用于不同对象间的传输,通讯

解决方案三:

序列化多用于网络IO通讯的代码,
我之前就见过类似url.openConnection(),...开始序列化的代码,
写对象到流里(序列化),或者读流写对象到内存(反序列化)
我觉得序列化和反序列化都看成一个整体。
所以反序列化一个简单的作用就是可以获得一个对象的实例(这点有点像new 调用构造方法,反射class.forName("XXX").newInstance())
之前还有人告诉我序列化有利于负载均衡。我对这点理解的不是很透彻。大家可以探讨下。

解决方案四:

参考资料如下。其实主要是为了将JVM内存的数据存储到磁盘文件,然后再在需要的时候读入到JVM内存。可以用于不同java进程之间的通讯。
http://www.cnblogs.com/xdp-gacl/p/3777987.html

解决方案五:

好像是为了将对象写入硬盘或者传输。

解决方案六:

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等域是不受保护的。

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

解决方案七:

http://blog.csdn.net/yangxiangyuibm/article/details/43227457

解决方案八:

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等域是不受保护的。

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

解决方案九:

简而言之,你写的代码,可以理解为一个立体的,有层级关系的。但是你在网络传输的时候,或者存到硬盘里,立体结构是不行的,你要把他们换成
扁平的。其实就是把对象换成字节码的过程,便于传输和存储

解决方案十:

当你用到ObjectStream对象流的时候,需要用到实现序列化的类,implements Serizable实现这个接口~

时间: 2024-11-03 21:50:10

java-求助,Java中对象序列化的作用是什么?的相关文章

详解Java中对象序列化与反序列化_java

        序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是XML等格式.而字节的或XML编码格式可以还原完全相等的对象.这个相反的过程又称为反序列化.Java对象的序列化与反序列化 在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象.但是,我们创建出来的这些Java对象都是存在于JVM的堆内存中的.只有JVM处于运行状态

Java中对象序列化与反序列化详解_java

本文实例讲述了Java中对象序列化与反序列化.分享给大家供大家参考.具体如下: 一.简介 对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程. 序列化一般用于以下场景: 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.通过序列化对象在网络中传递对象: 3.通过序列化在进程间传递对象. 对象所属的类必须实现Serializable或是Externalizable接口才能被序列化.对实现了Serializable接口的类,其序列化

java object c-java中将对象序列化后存入数据库中,IOS系统如何读取

问题描述 java中将对象序列化后存入数据库中,IOS系统如何读取 以前开发Android系统,java语言中将一些对象以序列化形式存入了网站的数据库中,这样用户手机如果是Android的话不会有任何问题.现在开发IOS系统,这样出现的一个难题就是在Object_c语言中如何将原来的已序列化的数据读入到IOS系统中.有什么好的方法及思路,请指教.QQ:102697532mail:mingqixu1@163.com

java笔记九:对象序列化与反序列化

在java程序运行过程中,有许多的对象同时存在,但是程序结束运行或者JVM停止运行时这些对象都会消失.如何将这些对象保存起来以便下一次 再将这些对象读入内存呢?或者如何将某些对象通过网络传到另一端的java程序?实施对象的这种操作叫做对象的序列化(或者叫做持久化),重新读入内存叫 做反序列化. 基本数据类型的包装类和所有容器类都可以被序列化.用户自定义的类默认是不可以被序列化的.如果想要自己定义的类可以序列化就必须让这个类实现java.io.Serializable接口. 下面看一个Demo:

JAVA 类声明中关键字public的作用

      JAVA类声明中关键字public起到什么作用呢?如下Hello类的声明,按着字面的意思理解是:Hello类是公共的, 要求Hello类与类文件名必须保持一致,并且一个java文件中只能有一个public关键字声明的类. public class Hello{public static void main(String args[]){System.out.println("Hello JAVA!");} } 如果关键字public命名的类Hello与类文件名不一致,如下图

java web-javaweb session中对象时间属性格式化问题

问题描述 javaweb session中对象时间属性格式化问题 项目实战中,遇到session中存了一个对象,对象中有个时间属性,在jsp页面中获取对象 时间属性时,显示出来的时间没有格式化,跪求各路大神帮忙解决下... 解决方案 那在jsp页面获取的时间属性是什么样子的呢?可以再格式化一下后显示. 解决方案二: public static String getDateString(Date date,String format){ SimpleDateFormat yfm = new Sim

详解Java编程中对象的序列化_java

1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象.Java对象序列化就能够帮助我们实现该功能. 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象.必须注意地是,对象序列化保存的是对象的"状态",

解析Java的Jackson库中对象的序列化与数据泛型绑定_java

Jackson对象序列化这里将介绍将Java对象序列化到一个JSON文件,然后再读取JSON文件获取转换为对象.在这个例子中,创建了Student类.创建将有学生对象以JSON表示在一个student.json文件. 创建一个名为JacksonTester在Java类文件在 C:\>Jackson_WORKSPACE. 文件: JacksonTester.java import java.io.File; import java.io.IOException; import org.codeha

java与c++中的对象序列化 分析。

有时候我们在开发项目的时候,对于数据的保存 我们通常是直接将数据保存到磁盘上面 ,但是这样操作起来非常的不方便 ,尤其是在大型的项目开发中.  对象的序列化 可以将对象以数据的形式存储到文件中:反之我们也可以从文件中加载一个对象 ,也叫反序列化. 对于多个数据的操作封装在一起,写入文件,在反序列化的时候我们只需要读取这个对象就可以了  ,我么就不必关心内部数据和方法了 .因为所有数据都包含在对象中. 对象的序列化规则 不同的语言 不一样 ,java中有java的规则 ,c++中有自己的规则 .可