Java连载102-对象类文件的序列化与反序列化

一、对象类文件的序列换与反序列化

1.java.io.ObjectOutputStream;序列化JAVA对象到硬盘

2.java.io.ObjectInputStream;将硬盘中的数据“反序列化”到JVM内存中

Compile编译(java->class)

DeCompile反编译(class->java)

3.标识性接口的作用:

JVM如果检查到该对象实现了某个标识接口,会对它进行特殊待遇

如下代码中的User102实现的接口Serializable

疑问:User102实现Serializable接口,JVM会对它的特殊待遇是什么?

package com.bjpowernode.java_learning;

import java.io.*;

import java.io.Serializable;

?

public class D102_1_ObjectOutputStream {

  public static void main(String[] args) throws IOException,ClassNotFoundException{

    //1.创建java对象

    User102 u1 = new User102("彭于晏");

    //2.创建输出流(序列化流)(JVM中的对象状态保存到硬盘中)

    String address = "C:\\\\Users\\\\lenovo1\\\\Workspaces\\\\MyEclipse CI\\\\Java_learning\\\\src\\\\com\\\\bjpowernode\\\\java_learning\\\\temp1.txt";

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(address));

    //3.写入

    oos.writeObject(u1);//写进去的不是几个文字,而是一个字符串对象

    //4.刷新

    oos.flush();

    //5.关闭

    oos.close();

    //接下来我们需要把序列化的对象给读出来,也就是反序列化

    //6.创建反序列化流

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(address));

    //7.反序列化

    Object o = ois.readObject();

    System.out.println(o);

    //关闭

    ois.close();

  }

}

class User102 implements Serializable{//该接口是一个可序列化的,该接口没有任何方法,该接口是一个

  //标志性的接口,像这样的接口还有java.util.Cloneable

  String name;

  User102(String name){

    this.name=name;

  }

  public String toString() {

    return "User[name="+name+"]";

  }

}

二、源码:

D102_1_ObjectOutputStream.java

https://github.com/ruigege66/Java/blob/master/D102_1_ObjectOutputStream.java?

2.CSDN:https://blog.csdn.net/weixin_44630050

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

原文地址:https://www.cnblogs.com/ruigege0000/p/12563374.html

时间: 2024-11-05 15:51:10

Java连载102-对象类文件的序列化与反序列化的相关文章

Java将对象写入文件读出——序列化与反序列化

Java类中对象的序列化工作是通过ObjectOutputStream和ObjectInputStream来完成的. 写入: 1 File aFile=new File("e:\\c.txt"); 2 Stu a=new Stu(1, "aa", "1"); 3 FileOutputStream fileOutputStream=null; 4 try { 5 fileOutputStream = new FileOutputStream(aFi

java学习一目了然——File类文件处理

java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) File(File parent,String child) 创建文件: boolean createNewFile(); 创建文件夹: boolean mkdir(); 用于创建一层未定义文件夹 boolean mkdirs(); 用于创建多层未定义文件夹,相当于多个mkdir() 删除文件/文件夹

java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import nu.xom.Document; import nu.

.NET Core 对象到字节数组的序列化和反序列化

.NET Core中利用MemoryStream和BinaryFormatter可以实现对象到字节数组的序列化和反序列化: 定义ObjectSerializer类,实现对象到字节数组的序列化和反序列化 using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace Assembly { public static class O

java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流

package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintStream; /*从键盘输入一个文件夹路径,利用打印流将该文件夹下的所有文件(包括子文件夹)复制到D盘下temp文件夹下.*/ public class PrintAllT

Java I/O - 对象的输入输出与序列化

先说概念: 序列化是Java提供的一种将对象写入到输出流.并在之后将其读回的机制. 序列化:把内存中的java对象转换成与平台无关的二进制字节序列,以便永久保存在磁盘上或通过网络进行传输. Java提供的对对象进行读写的流对象(即承载对象的媒介)为ObjectOutputStream 和 ObjectInputStream ,它们的作用就是把对象转换为字节序列,并承载这些序列,并提供了writeObject() 和 readObject() 方法对这些字节序列进行读写. 那么,如何实现对象的序列

java对象与字符串的序列化和反序列化

package com.mzj.practice.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Seri

Java中对文件的序列化和反序列化

public class ObjectSaver { public static void main(String[] args) throws Exception { /*其中的 D:\\objectFile.obj 表示存放序列化对象的文件*/ //序列化对象 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("c:\\test\\objectFile.obj")); Customer cust

用C++优雅的实现对象到文件的序列化/反序列化

需求 . 在写代码的过程中,经常会需要把代码层面的对象数据保存到文件,而这些数据会以各种格式存储.例如:json,xml,二进制等等.最近恰好就需要把对象以二进制存储到硬盘.这是一个很简单的需求,相比json,xml格式,二进制是直接把字节copy到硬盘,没有中间商赚差价,所以这实现起来相对容易. 实现 struct Vec3 { float x; float y; float z; } . 上面是一个简单的三维向量结构体,如何把它序列化到文件呢? Vec3 v; v.x = 1.0f; v.y