java 流对象

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

  把Java对象转换为字节序列的过程称为对象的序列化。

  把字节序列恢复为Java对象的过程称为对象的反序列化。

  对象的序列化主要有两种用途:

  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

  2) 在网络上传送对象的字节序列。

    java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。

  java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。、

  只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式 。

  对象序列化包括如下步骤:

  1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;

  2) 通过对象输出流的writeObject()方法写对象。

  对象反序列化的步骤如下:

  1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;

  2) 通过对象输入流的readObject()方法读取对象

  1. import java.io.*;
  2. public class ObjectDemo
  3. {
  4.  public static void main(String[] args)
  5.  {
  6.   try
  7.   {
  8.    ObjectOutputStream objectOut=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("object.bin")));
  9.    Customer cus=new Customer("wang","0001","pddd",3000);
  10.    objectOut.writeObject(cus);
  11.    objectOut.close();
  12.    ObjectInputStream objectIn=new ObjectInputStream(new BufferedInputStream(new FileInputStream("object.bin")));
  13.    cus=(Customer)objectIn.readObject();
  14.    System.out.println("Name:"+cus.getName());
  15.    System.out.println("ID:"+cus.getID());
  16.    System.out.println("Password:"+cus.getPassword());
  17.    System.out.println("Salary:"+cus.getSalary());
  18.   }
  19.   catch (NotSerializableException e)
  20.   {
  21.    System.out.println(e.getMessage());
  22.   }
  23.   catch(ClassNotFoundException e)
  24.   {
  25.       System.out.println(e.getMessage());
  26.   }
  27.   catch(IOException e)
  28.   {
  29.       System.out.println(e.getMessage());
  30.   }
  31.  }
  32. }
  33. class Customer implements Serializable
  34. {
  35.  private String name,ID;
  36.  transient private String password;
  37.  private float salary;
  38.  public Customer(String name,String ID,String password,float salary)
  39.  {
  40.    this.name=name;
  41.    this.ID=ID;
  42.    this.password=password;
  43.    this.salary=salary;
  44.  }
  45.  public String getName()
  46.  {
  47.    return name;
  48.  }
  49.  public String getID()
  50.  {
  51.    return ID;
  52.  }
  53.  public String getPassword()
  54.  {
  55.    return password;
  56.  }
  57.  public float getSalary()
  58.  {
  59.    return salary;
  60.  }
  61. };
posted @ 2016-09-20 09:49  奔跑的小决  阅读(147)  评论(0)    收藏  举报