黑马程序员技术交流社区
标题:
求教对象序列化
[打印本页]
作者:
jyn
时间:
2014-1-12 19:12
标题:
求教对象序列化
本帖最后由 jyn 于 2014-1-13 22:24 编辑
什么是对象序列化?对象序列化的实现方法是什么呢?高手指教。。。?
作者:
灰太狼爱平底锅1
时间:
2014-1-12 20:42
本帖最后由 灰太狼爱平底锅1 于 2014-1-12 20:45 编辑
序列化就是将对象的状态存储到特定存储介质的过程,如下如
2.png
(25.62 KB, 下载次数: 6)
下载附件
2014-1-12 20:26 上传
一个类想要被序列化的话,需要实现java.io.Serializable接口,此接口无任何方法,但实现该接口之后即表示该类具有了被序列化的能力
public class SerializableObj {
public static void main(String[] args) throws FileNotFoundException, IOException {
ObjectOutputStream oos=null;
try{
//创建ObjectOutputStream输出流
oos=new ObjectOutputStream(new FileOutputStream("j:\\1.txt"));
Student stu=new Student("安娜",30,"女","123456");
//对象序列化,写入输出流
oos.writeObject(stu);
}catch(IOException ex){
ex.printStackTrace();
}finally{
if(oos!=null){
oos.close();
}
}
}
复制代码
通过上述代码可以实现将对象stu序列化输出到1.txt,但看到是乱码,二进制文件,因此需要通过ObjectInputStream类来查看,代码如下:
public class readSerializableObj {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream ois=null;
try{
//创建ObjectOutputStream输出流
ois=new ObjectInputStream(new FileInputStream("j:\\1.txt"));
//反序列化,强转类型
Student stu=(Student)ois.readObject();
//输出生成后对象信息
System.out.println("姓名为:"+stu.getName());
System.out.println("年龄为:"+stu.getAge());
System.out.println("性别为:"+stu.getGender());
System.out.println("密码为:"+stu.getpassword());
}catch(IOException ex){
ex.printStackTrace();
}finally{
if(ois!=null){
ois.close();
}
}
}
复制代码
序列化及反序列实现过程基本如上,还请高手补充。
作者:
mrwise1991
时间:
2014-1-12 23:23
所谓的对象序列化,也称为串行化,是指将对象转化成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输和保存。在java中提供了ObjectInputStream和ObjectOutputStream这两个类用于序列化对象的操作。
要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用作一种标记以被编译器作特殊处理。
import java.io.*;
public class Person implements Serializable{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
retrun "姓名:"+this.name+",年龄:"+this.age;
}
}
复制代码
作者:
范晓冲
时间:
2014-1-13 09:49
/*
为什么需要序列化和反序列化?
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。
无论是何种类型数据,都会以二进制序列的形式在网络上传送。
发送方需要把这个Java对象转换为字节序列,才能在网络上传送;
接收方则需要把字节序列再回复为Java对象。
把Java对象转换为字节序列的过程称为对象的序列化。
把字节序列转换为Java对象的过程称为对象的反序列化。
*/
//序列化和反序列化的步骤和实例
1、Student类实现Serializable接口:
class Student implements Serializable{
//学生的学号
int uuid;
//住址
String address;
public Student(int uuid,String address){
super();
this.uuid=uuid;
this.address=address;
}
}
2、通过ObjectOutputStream将Student对象的数据写入到文件中,即序列化。
Student student=new Student(20140808168,"北京市海淀区东北旺西路8号");
FileOutputStream fos=null;
ObjectOutputStream oos=null;
//序列化
fos=new FileOutputStream("e:/b.txt");
oos=new ObjectOutputStream(fos);
oos.writeObject(student);
oos.flush();
oos.close();
fos.close();
3、通过ObjectInputStream将文件中二进制数据反序列化成Student对象:
ObjectInputStream ois=null;
FileInputStream fis=null;
//反序列化
fis=new FileInputStream("e:/b.txt");
ois=new ObjectInputStream(fis);
Student s=()ois.readObject();
System.out.println(s.address);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2