A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

jyn

初级黑马

  • 黑马币:0

  • 帖子:7

  • 精华:0

© jyn 初级黑马   /  2014-1-12 19:12  /  1030 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jyn 于 2014-1-13 22:24 编辑

什么是对象序列化?对象序列化的实现方法是什么呢?高手指教。。。?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

3 个回复

倒序浏览
本帖最后由 灰太狼爱平底锅1 于 2014-1-12 20:45 编辑

序列化就是将对象的状态存储到特定存储介质的过程,如下如


一个类想要被序列化的话,需要实现java.io.Serializable接口,此接口无任何方法,但实现该接口之后即表示该类具有了被序列化的能力
  1. public class SerializableObj {
  2.         public static void main(String[] args) throws FileNotFoundException, IOException {
  3.                 ObjectOutputStream oos=null;
  4.                 try{
  5.                 //创建ObjectOutputStream输出流
  6.                 oos=new ObjectOutputStream(new FileOutputStream("j:\\1.txt"));
  7.                 Student stu=new Student("安娜",30,"女","123456");
  8.                 //对象序列化,写入输出流
  9.                 oos.writeObject(stu);
  10.                
  11.                 }catch(IOException ex){
  12.                         ex.printStackTrace();
  13.                 }finally{
  14.                         if(oos!=null){
  15.                                 oos.close();
  16.                         }
  17.                 }
  18.         }
复制代码
通过上述代码可以实现将对象stu序列化输出到1.txt,但看到是乱码,二进制文件,因此需要通过ObjectInputStream类来查看,代码如下:
  1. public class readSerializableObj {        
  2.         public static void main(String[] args) throws IOException, ClassNotFoundException  {
  3.                 ObjectInputStream ois=null;
  4.                 try{
  5.                 //创建ObjectOutputStream输出流
  6.                 ois=new ObjectInputStream(new FileInputStream("j:\\1.txt"));
  7.                 //反序列化,强转类型
  8.                 Student stu=(Student)ois.readObject();
  9.                 //输出生成后对象信息
  10.                 System.out.println("姓名为:"+stu.getName());
  11.                 System.out.println("年龄为:"+stu.getAge());
  12.                 System.out.println("性别为:"+stu.getGender());
  13.                 System.out.println("密码为:"+stu.getpassword());
  14.                 }catch(IOException ex){
  15.                         ex.printStackTrace();
  16.                 }finally{
  17.                         if(ois!=null){
  18.                                 ois.close();
  19.                         }
  20.                 }
  21.         }
复制代码
序列化及反序列实现过程基本如上,还请高手补充。



评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
FFF + 1 赞一个!
jyn + 2 很给力!

查看全部评分

回复 使用道具 举报 1 0
所谓的对象序列化,也称为串行化,是指将对象转化成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输和保存。在java中提供了ObjectInputStream和ObjectOutputStream这两个类用于序列化对象的操作。
要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用作一种标记以被编译器作特殊处理。
  1. import java.io.*;
  2. public class Person implements Serializable{
  3.     private String name;
  4.     private int age;
  5.     public Person(String name,int age){
  6.           this.name=name;
  7.           this.age=age;
  8.     }
  9.      public String toString(){
  10.           retrun "姓名:"+this.name+",年龄:"+this.age;
  11.      }
  12. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
FFF + 1 赞一个!
jyn + 2 赞一个!

查看全部评分

回复 使用道具 举报
  1. /*
  2. 为什么需要序列化和反序列化?
  3.                 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。
  4.                 无论是何种类型数据,都会以二进制序列的形式在网络上传送。
  5.                 发送方需要把这个Java对象转换为字节序列,才能在网络上传送;
  6.                 接收方则需要把字节序列再回复为Java对象。
  7.                 把Java对象转换为字节序列的过程称为对象的序列化。
  8.                 把字节序列转换为Java对象的过程称为对象的反序列化。
  9. */
  10. //序列化和反序列化的步骤和实例
  11. 1、Student类实现Serializable接口:
  12. class Student implements Serializable{
  13.     //学生的学号
  14.                 int uuid;
  15.                 //住址
  16.                 String address;
  17.                 public Student(int uuid,String address){
  18.                                 super();
  19.                                 this.uuid=uuid;
  20.                                 this.address=address;
  21.                 }
  22. }
  23. 2、通过ObjectOutputStream将Student对象的数据写入到文件中,即序列化。

  24.                 Student student=new Student(20140808168,"北京市海淀区东北旺西路8号");
  25.                 FileOutputStream fos=null;
  26.                 ObjectOutputStream oos=null;
  27.                
  28.                 //序列化
  29.                 fos=new FileOutputStream("e:/b.txt");
  30.                 oos=new ObjectOutputStream(fos);

  31.                 oos.writeObject(student);
  32.                 oos.flush();
  33.                 oos.close();
  34.                 fos.close();

  35. 3、通过ObjectInputStream将文件中二进制数据反序列化成Student对象:

  36.                 ObjectInputStream ois=null;
  37.                 FileInputStream fis=null;
  38.                
  39.                 //反序列化
  40.                 fis=new FileInputStream("e:/b.txt");
  41.                 ois=new ObjectInputStream(fis);
  42.                 Student s=()ois.readObject();
  43.                 System.out.println(s.address);













复制代码


评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
FFF + 1 很给力!
jyn + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马