ObjectInputStream || ObjectOutputStream 序列化对象输入输出流Demo 学习

A:Api 说明:

ObjectOutputStream 写入的基本数据和对象 *(内存 到 硬盘 对象的 存储!!)

ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。

ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。

ObjectInputStream 确保从流创建的图形中所有对象的类型与 Java 虚拟机中显示的类相匹配。使用标准机制按需加载类。

只有支持 java.io.Serializable 或 java.io.Externalizable 接口的对象才能从流读取。

readObject 方法用于从流读取对象。应该使用 Java 的安全强制转换来获取所需的类型。在 Java 中,字符串和数组都是对象,所以在序列化期间将其视为对象。读取时,需要将其强制转换为期望的类型。

可以使用 DataInput 上的适当方法从流读取基本数据类型。

默认情况下,对象的反序列化机制会将每个字段的内容恢复为写入时它所具有的值和类型。反序列化进程将忽略声明为瞬态或静态的字段。对其他对象的引用使得根据需要从流中读取这些对象。使用引用共享机制能够正确地恢复对象的图形。反序列化时始终分配新对象,这样可以避免现有对象被重写。

读取对象类似于运行新对象的构造方法。为对象分配内存并将其初始化为零 (NULL)。为不可序列化类调用无参数构造方法,然后从以最接近 java.lang.object 的可序列化类开始和以对象的最特定类结束的流恢复可序列化类的字段。

B:Demo 学习和测试 


代码复制粘贴直接可以运行(异常处理不要太在意(全部抛异常) 理解知识点即可....嘿嘿)

代码结构

Apptest.java

package ankermaker.top.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import ankermaker.top.entity.Student;
public class Apptest {
    /**
     * 序列化 存储
     * @throws Exception
     * @throws Exception
     * ObjectInputStream 实际上 在 FileInputStream基础 创建的
     */
    public static void readObjext() throws Exception, Exception {
        ObjectInputStream read=new ObjectInputStream(new FileInputStream("c://student.o"));
        Student s1=(Student) read.readObject();
        Student s2=(Student) read.readObject();
        read.close();
        System.out.println(s1+"####"+s2 );
    }
    public static void writeObject() throws FileNotFoundException, IOException {

        ObjectOutputStream write=new ObjectOutputStream(new FileOutputStream("c://student.o"));//序列化 存储 对象
        write.writeObject(new Student(22,"hy"));
        write.writeObject(new Student(12,"gr"));
        write.close();
    }
    public static void main(String[] args) throws Exception, Exception {
        readObjext();//反序列化 获取 对象 数据
//        writeObject();//后面测试 对象的 的获取 时候 注释掉 应为 已经 从内存 中 将 对象保存的 相应的 硬盘中了
    }

}

 Student.java

package ankermaker.top.entity;

import java.io.Serializable;

/**
 * 对象 输出流 测试
 * @author Administrator
 * Serializable  序列化 接口
 */
public class Student  implements Serializable{

    private static final long serialVersionUID = -3349982764047612364L;
    private int age;
    private String name;

    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [age=" + age + ", name=" + name + "]";
    }

}

 测试结果

WriteObject()测试

readObject()测试

--------------------------------------------------【谢谢查看学习,本人不才,只能多学多积累,欢迎大牛指点】---------------------------------------------------------------

时间: 2024-08-23 23:55:51

ObjectInputStream || ObjectOutputStream 序列化对象输入输出流Demo 学习的相关文章

(JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  ObjectInputStream 使用: 对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程.既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接

对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  ObjectInputStream 使用: 对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程.既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接

java中常见的输入输出流案例学习

字节输入流: 1.FileInputStream 用途:从文件系统中的文件获得输入字节,常用于读取图像.声音等原始字节流,读取字符流可考虑使用FileReader 详细构造函数与常用方法可参考API文档,网上已经有中文版的API了,我是个E文盲,伤不起 这里介绍一个最常见的方法: read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中. ->off:b字节数组中的偏移量 小知识:数组偏移量,比如a[1,2,3,4,5]

文件输入输出流的学习

1.单个字节形式的字节输入输出(效率较低) (1)单个字节的输入流 package qwe;import java.io.*;public class inputStream1 { public static void main(String[] args) { FileInputStream in=null; try { in=new FileInputStream("a.txt"); int n; //用以接收输入流从文件读取的单个字节, read()函数返回的是字节对应的ascl

I/O 对象输入输出流

package com.xuexi.IO; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Obj { public static void main(St

《JS权威指南学习总结--6.9序列化对象》

内容要点: 一.JSON.stringify()和JSON.parse() 1.对象序列化(serialization)是指将对象的状态转换为字符串,也可将字符串还原为对象.ES5提供了内置函数JSON.stringify()和JSON.parse()用来序列化和还原JS对象. 这些方法都使用JSON作为数据交换格式,JSON的全称是 "JavaScript Object Notation"---JS对象表达式,它的语法和JS对象与数组直接量的语法非常接近: o = {x:1,y:{z

java I/O系统(输入输出流)

java I/O系统(输入输出流) 流的特性1.含有流质(数据)2.它有方向(读或写) 流的分类: 输入流和输出流 输入流:io包中的输入流继承自抽象类InputStream或Reader 输出流:io包中的输入流继承自抽象类OutputStream或Writer 字节流和字符流 注:1字节代表1个英文单词存储的数据大小,一个汉字占两字节 1.字节流:以byte为最小单位传送,继承自抽象类InputStream或OutputStream,用于处理二进制文件,InputStream为读取字节流的父

JAVA中文件的读写 I/O 输入输出流

主要内容 1.编码问题 2.File类的使用 3.RandomAccessFile的使用 4.I/O 输入输出流 编码问题: 1 import java.io.UnsupportedEncodingException; 2 3 public class 编码问题 { 4 public static void main(String[] args) { 5 // 我们项目的默认编码是GBK 6 String s = "测试 ABC"; 7 byte[] byte1 = s.getByte

Java-IO 输入输出流详解

一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准信息交换码,用一个字节的7位可以表示一个字符        ISO8859-1:拉丁码表,西欧标准字符集,用一个字节的8位表示        GB2312:中文编码表,用两个字节来表示中文编码        GBK:中文编码表的升级,融合了更多表示中文文字符号        GB18030:GBK的