黑马程序员技术交流社区
标题:
什么是java序列化,如何实现java序列化?
[打印本页]
作者:
韩军博
时间:
2011-12-10 10:19
标题:
什么是java序列化,如何实现java序列化?
本帖最后由 韩军博 于 2011-12-10 21:12 编辑
请各位详细解释
作者:
◇半度微凉
时间:
2011-12-10 10:51
序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化是为了解决在对对象流进行读写操作时所引发的问题。简单的说,比如我们有时候将一个java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个java 对象,如果该对象要被存储或被传输,那么该对象就必须实现serializable 接口,这样,javac 编译时就会进行特殊处理,编译的类才可以被writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable 接口,该接口是一个mini 接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。但是,用静态关键字标识的对象不能序列化,并且在解序列是无效的!
作者:
程传鹏
时间:
2011-12-10 13:30
1. 什么是java序列化?
java序列化(SequenceInputStream)表示其他输入流的罗辑串联
即它从输入流的有序集合开始,并从第一个输入流开始读取值,直到文件结尾,接着从第二个输入流读取,依次类推,直到包括的最后一个输入文件结尾为止。可理解成将多个小的读入流合并成一个大的读入流
2.如何实现java序列化?
即SequenceInputStream的使用方法
借用别人写好的,贴给楼主,如下:
1、自己简单的写法。
public class TestSequence {
public static void main(String[] args)throws Exception{
//不管怎么样,先创建两个文件。从里面读取数据,(我的文件里面有内容!)
InputStream in1=new FileInputStream(new File("d:\\jack.txt"));
InputStream in2=new FileInputStream(new File("d:\\jack2.txt"));
//读取,数据后要生成的文件
OutputStream ou=new FileOutputStream(new File("d:\\jack3.txt"));
//创建SequenceInputStream类,
SequenceInputStream si=new SequenceInputStream(in1,in2);
//因为SequenceInputStream,是一个字节一个字节读,要判断一下是否读完了。
int c=0;
while((c=si.read())!=-1){
//这里也是一个字节一个字节写的。
ou.write(c);
}
//关闭所有的资源
si.close();
ou.close();
in2.close();
in1.close();
}
}
作者:
王青山
时间:
2011-12-10 16:28
序列化是什么:
序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。
序列化的什么特点:
如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。
什么时候使用序列化:
一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中 或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
序列化的实现:
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
作者:
韩军博
时间:
2011-12-10 21:11
谢谢你们的回答
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2