ObjectInputStream类:负责对象的输入处理 ObjectOutputStream类:负责对象的输出处理
序列化:将Java对象转换成统一的字节序列格式的过程
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
对象流的作用:
ObjectOutputStream:对象输出流,把对象转换成二进制流(字节序列),这个过程就是序列化
ObjectInputStream:对象输入流,将二进制流恢复成java对象,这个过程就是反序列化
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复该java对象的话则用对象输入流的readObject()方法。如果想让类中的某个属性不被序列化成二进制字节序列,需要在该属性上添加transient关键字
参考示例:
/**
* 图书类,实现Serializable接口才能被序列化 *
* @author lujun * */
public class Book implements Serializable { // 图书名称,不能被序列化
private transientString bookName; // 图书价格 privateint price; // 图书作者
private String author;
public String getBookName() { returnbookName; }
public void setBookName(String bookName) { this.bookName = bookName; }
publicintgetPrice() { return price; }
public void setPrice(int price) { this.price = price; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
//输出信息 @Override
public String toString() {
// TODO Auto-generated method stub
returnthis.bookName+\} }
//测试类
public class MyTest {
/**
* 序列化:把java对象转换成二进制流,将二进制字节序列保存在磁盘上
*/
public void trans() { // 在磁盘上创建一个文件,把对象序列化后的二进制字节序列存保存进去
File f = new File(\"D:/book.dat\"); try {
// 用文件输出流接收数据 FileOutputStreamoutStream = new FileOutputStream(f); //封装对象输出流 ObjectOutputStreamos=new ObjectOutputStream(outStream); //创建一个对象 Book b=new Book(); b.setAuthor(\"吴承恩\"); b.setBookName(\"西游记\"); b.setPrice(120); System.out.println(\"序列化前的对象:\"); System.out.println(b); //序列化 os.writeObject(b); //关闭流 os.close(); outStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // } /**
* 反序列化:把二进制流恢复成java对象,将对象写进内存 */
public void revesTrans(){ File f = new File(\"D:/book.dat\"); try { //输入流,读数据 FileInputStreamfis=new FileInputStream(f); //封装成对象输入流 ObjectInputStreamos=new ObjectInputStream(fis); //反序列化,把二进制流恢复成java对象 Object obj= os.readObject(); System.out.println(\"反序列化后对象:\"); System.out.println(obj); } catch (Exception e) { // TODO: handle exception } }
public static void main(String[] args) { MyTest m=new MyTest();
//序列化 m.trans(); //反序列化 m.revesTrans(); } }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务