zoukankan      html  css  js  c++  java
  • Java 对象流

    对象流

    ObjectInputStream ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object obj)方法,将一个对象obj写入到一个文件,使用readObject()读取一个对象。

    构造方法:

    ObjectInputStream (InputStream in)

    ObjectOutputStream(OutputStream out)

    当准备将一个对象写入文件的时候,首先用OutputStream的子类创建一个输出流。

      OutputStream outStream = new FileOutputStream("file_name");

      ObjectOutputStream objstream = new ObjectOutputStream(outStream);

    当使用对象流写入或者读取对象的时候,必须保证该对象是序列化的,这样是为了保证对象能够正确的写入文件,并能够把对象正确的读回程序。

    所谓的对象的序列化就是将对象转换成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输及保存。在Java中提供了ObejctInputStream 和ObjectOutputStream这两个类用于序列化对象的操作。用于存储和读取对象的输入输出流类,要想实现对象的序列化需要实现Serializable接口,但是Serializable接口中没有定义任何的方法,仅仅被用作一种标记,以被编译器作特殊处理。

    package project;
    import java.io.*;
    //实现Serializable 接口
    class TV implements Serializable{
    /**
    *
    */
    private static final long serialVersionUID = 1597309922188243103L;
    String name;
    int price;
    public void setName(String name){
    this.name = name;
    }
    public void setPrice(int price){
    this.price = price;
    }
    public String getName() {
    return name;
    }
    public int getPrice() {
    return price;
    }

    }
    public class Main{
    public static void main(String[] args) {
    TV changhongTv = new TV();
    changhongTv.setName("长虹电视");
    changhongTv.setPrice(5678);
    File file = new File("changhong");
    try {
    //序列化写入文件
    OutputStream outputStream = new FileOutputStream(file);
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
    objectOutputStream.writeObject(changhongTv);
    objectOutputStream.close();

    //序列化读取对象
    InputStream inputStream = new FileInputStream(file);
    ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
    TV xinfeiTv = (TV)objectInputStream.readObject();
    objectInputStream.close();


    xinfeiTv.setName("新飞电视");
    xinfeiTv.setPrice(6666);

    System.out.println("changhong name "+changhongTv.getName());
    System.out.println("changhong price "+changhongTv.getPrice());

    System.out.println("xinfei name "+xinfeiTv.getName());
    System.out.println("xinfei price "+xinfeiTv.getPrice());

    } catch (ClassNotFoundException e) {
    // TODO: handle exception
    System.out.println("不能读取对象");
    }catch (IOException e) {
    // TODO: handle exception
    System.out.println(e);
    }
    }
    }

    对象的序列化的实现方便了对象间的克隆,使得复制品实体的变化不会引起原对象实体的变化。

    下面是一个实例:

    另外,Java.awt包中的Componet类是实现Serializable接口的类,因此程序可以实现把组件写入输出流,然后用输入流读取该组件的克隆。

  • 相关阅读:
    formValidator表单验证
    js中判断一个对象的类型的种种方法
    利用jQuery中的serialize方法大量获取页面中表单的数据,发送的服务器
    用html和css写一个头部header和左侧菜单栏menu-bar固定的的页面
    关于刚才那个全选问题的解决
    关于input[type='checkbox']全选的问题
    用CSS来定义<p>标签,要求实现以下效果:字体颜色再IE6下为黑色,IE7下为红色,IE8下为绿色,其他浏览器下为黄色。
    Vue.js(20)之 封装字母表(是这个名字吗0.0)
    Vue.js之calendar组件
    书:构造器模式
  • 原文地址:https://www.cnblogs.com/Firesun/p/9428641.html
Copyright © 2011-2022 走看看