美文网首页
java系列19:对象流

java系列19:对象流

作者: 3e1094b2ef7b | 来源:发表于2017-06-23 08:53 被阅读0次

将对象写入到流,这个过程叫做序列化。
反之,称为反序列化。

如果要用于网络中传输的数据,则这些数据必须要实现序列化。

例1:

// Student.java

package test;

public class Student {
    String name;
    int age;
    String sex;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void study() {
        System.out.println("我在认真学习");
    }

    @Override
    public String toString() {
        return "我的名字:" + name + ",我的年龄:"
                + age + ",我的性别:" + sex;
    }
}

// Test.java

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class Test {
    public static void main(String[] args) {
        Student stu = new Student("李行之", 25, "男");
        File file = new File("a.txt");
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(stu);
            oos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
运行结果,未进行序列化,因此无法将对象写入流中。13行:oos.writeObject(stu);

例2:

// 1. Student.java

package test;

import java.io.Serializable;

/*
 *  implements Serializable:实现序列化接口。
 *  它没有任何方法需要实现,只是一个标识。
 *  序列化之后,会有一个编号植入到对象中;当写入到磁盘时,会将编号一起写入磁盘。
 */
public class Student implements Serializable{
    String name;
    int age;
    String sex;
    // transient:不序列化某些属性
    transient long money = 10000000;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void study() {
        System.out.println("我在认真学习");
    }

    @Override
    public String toString() {
        return "我的名字:" + name + ",我的年龄:" 
                + age + ",我的性别:" + sex + ",我的钱:" + money;
    }
}

// 2. Test.java

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
 * 序列化
 * @author xiangdonglee
 *
 */
public class Test {
    public static void main(String[] args) {
        Student stu = new Student("李行之", 25, "男");
        File file = new File("a.txt");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(stu);
            oos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
序列化结果
// 3.Test1.java

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * 反序列化
 * @author xiangdonglee
 *
 */
public class Test1 {
    public static void main(String[] args) {
        File file = new File("a.txt");
        if(file.exists()) {
            try {
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
                Student stu = (Student) ois.readObject();
                System.out.println(stu);
                ois.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
transient修饰的money属性没有被序列化

相关文章

  • java系列19:对象流

    将对象写入到流,这个过程叫做序列化。反之,称为反序列化。 如果要用于网络中传输的数据,则这些数据必须要实现序列化。...

  • Java自学-I/O 对象流

    Java 对象流 ObjectInputStream,ObjectOutputStream 对象流指的是可以直接把...

  • 07-Java序列化面试题(10题)

    1、什么是java序列化,如何实现java序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内...

  • Android内存优化(二)DVM和ART的GC日志分析

    相关文章Android性能优化系列Java虚拟机系列 前言 在Java虚拟机(三)垃圾标记算法与Java对象的生命...

  • transient

    transient变量 对象实现java.lang.Serializable接口后可以把该对象以对象流的方式将对象...

  • java笔记--IO流(字符流和字节流)

    IO流: 用来处理设备之间的数据传书。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。流...

  • JAVA基础-JAVA8 对集合的增强

    Java8流、流操作集合 Predicate 谓词对象 Java8起为Collection集合新增了一个remov...

  • Java序列化总结

    Java序列化总结 序列化就是指将Java对象转换成一系列的字节,反序列化即使将一系列的字节恢复成Java对象。序...

  • Java 8 实战 (一)

    @[笔记, Java8, Java] [TOC] 第一章 Java 8的更新 流处理流是一系列数据项,一次只生成一...

  • Java自学-I/O Stream流

    Java的流 Stream 什么是流(Stream),流就是一系列的数据 步骤 1 : 什么是流 当不同的介质之间...

网友评论

      本文标题:java系列19:对象流

      本文链接:https://www.haomeiwen.com/subject/dmiqcxtx.html