黑马程序员技术交流社区
标题:
对象序列化问题
[打印本页]
作者:
凡延海
时间:
2012-5-21 15:04
标题:
对象序列化问题
import java.io.Serializable;
public class Student implements Serializable {
public int id;
private String name;
int age;
String dep;
public Student(int id,String name,int age,String dep)
{
this.id=id;
this.name=name;
this.age=age;
this.dep=dep;
}
}
}
}
继承了Serializable就表示这个对象可以被序列化,序列化到底是做什么的呢,Serializable有什么
作用呢?
作者:
Fc10232
时间:
2012-5-21 15:09
实现了Serializable接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回原来的样子
类通过实现 java.io.Serializable 接口以启用其序列化功能。
未实现此接口的类将无法使其任何状态序列化或反序列化。
作者:
Fc10232
时间:
2012-5-21 15:12
简单的讲就是可以暂时的把不需要的东西放在一边,等有用的时候在让它恢复原样
作者:
胥江
时间:
2012-5-21 15:21
一个类只有实现了Serializable接口,它的对象才是可序列化的.
因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。
而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化
什么情况下需要序列化
a)当你想把的内存中的对象写入到硬盘的时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
再稍微解释一下:a)比如说你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口;
b)在进行java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口;最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,所以可以在网络上传输。
c)如果要通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。
没有人说的话能全部准确,批判性的参考。
作者:
杨梦宇
时间:
2012-5-21 15:22
楼上说的很通俗易懂。序列化是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。
比如说你想让一个类能够序列化
就编写:
import java.io.Serializable;
class TestSerial implements Serializable {
public byte version = 100;
public byte count = 0;
}
复制代码
然后可以将类所生成的对象“存储”到文件中,以便用到时可以取出
public static void main(String args[]) throws IOException {
FileOutputStream fos = new FileOutputStream("temp.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
TestSerial ts = new TestSerial();
oos.writeObject(ts);
oos.flush();
oos.close();
}
复制代码
想取出时 可以编写 这也就重建了对象
public static void main(String args[]) throws IOException {
FileInputStream fis = new FileInputStream("temp.out");
ObjectInputStream oin = new ObjectInputStream(fis);
TestSerial ts = (TestSerial) oin.readObject();
System.out.println("version="+ts.version);
}
复制代码
执行结果是100
作者:
凡延海
时间:
2012-5-21 15:47
嗯,明白了,Serializable就是个标记吧,告诉系统这个类是可序列化对。我想问题想查了,感觉一个空的Serializable怎么能够让类序列化呢。虚拟机应该有相应的处理Serializable标记的机制,不需要我操心,呵呵。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2