Java基础知识➣序列化与反序列化(四)
概述
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
序列化所需类
类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包含序列化和反序列化对象的方法。ObjectOutPutStream进行对象的序列化成二进制或者字符串,其中主要使用的方法是writeObject(object data);ObjectInputStream是将二进制或者字符串反序列化成对象,主要采用的方法是readObject()
类需要序列化必须实现 java.io.Serializable 对象。与序列化对应关键字transient
序列化代码块
将对象化对象保存到流中,将流里面的数据进行Base64编码。主要用到类FileOutPutStream和FileInputStream、ByteArrayOutputStream和ByteArrayInputStream。对象的使用如实例代码:
public class SerializeDemo {
    public static void SeriaData()
    {
        Employee em=new Employee();
        em.name="Justin";
        em.address="GD China Num 98";
        em.SSN=;
        em.number=;
        try{
//        FileOutputStream fileout=new FileOutputStream("c:/employee.ser");
//        ObjectOutputStream out=new ObjectOutputStream(fileout);
//        out.writeObject(em);
//        out.close();
//        System.out.printf("Serialized data is saved in c:/employee.ser");
        ByteArrayOutputStream outstring=new ByteArrayOutputStream();
        ObjectOutputStream out=new ObjectOutputStream(outstring);
        out.writeObject(em);
        out.close();
        String photodata = Base64.getEncoder().encodeToString(outstring.toByteArray());
        System.out.println(photodata);
        Employee nem=new Employee();
        ByteArrayInputStream strim=new ByteArrayInputStream(Base64.getDecoder().decode(photodata));
        ObjectInputStream svtin=new ObjectInputStream(strim);
        nem=(Employee)svtin.readObject();
        strim.close();
        nem.maillCheck();
//        FileInputStream fileIn = new FileInputStream("c:/employee.ser");
//        ObjectInputStream in = new ObjectInputStream(fileIn);
//        nem = (Employee) in.readObject();
//        in.close();
//        fileIn.close();
//        nem.maillCheck();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}
class Employee implements Serializable
{
    public String name;
    public String address;
    public transient int SSN;
    public int number;
    public void maillCheck()
    {
        System.out.println("Mailing a check to "+name +" Address:"+address);
    }
}
Java基础知识➣序列化与反序列化(四)的更多相关文章
- 【Java基础】序列化与反序列化深入分析
		
一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...
 - JAVA基础之——序列化和反序列化
		
1 概念 序列化,将java对象转换成字节序列的过程. 反序列化,将字节序列恢复成java对象的过程. 2 为什么要序列化? 2.1 实现数据持久化,当对象创建后,它就会一直在,但是在程序终止时,这个 ...
 - JAVA基础之序列化与反序列化
		
序列化和反序列化: 把对象转化为字节序列的过程称为序列化: 把字节序列恢复为对象的过程称为对象的反序列化: 方法: Java.io.ObjectOutputStream代表对象的输出流,writeOb ...
 - java基础知识-序列化/反序列化-gson基础知识
		
以下内容来之官网翻译,地址 1.Gson依赖 1.1.Gradle/Android dependencies { implementation 'com.google.code.gson:gson:2 ...
 - Java基础之序列化对象——反序列化对象(DeserializeObjects)
		
控制台程序,使用如下代码能读入包含Junk对象的文件: import java.io.*; import java.nio.file.*; class DeserializeObjects { pub ...
 - JAVA基础知识总结:十四
		
一.泛型 1.概念 泛型指的是泛指的类型.主要用于子类和父类,接口和实现类之间的数据传递 JDK1.5之后新增的特性,主要用于解决安全问题,是一个安全机制 好处: a.可以提高代码的复用性 b.避免了 ...
 - JAVA基础知识|Executors提供的四种线程池
		
一.Thread与Executors 开启新的线程,我们经常会采用如下方法: Thread thread =new Thread(new Runnable() { @Override public v ...
 - Java基础知识➣泛型整理(四)
		
概述 泛型的本质是参数化类型,使用同一套代码来满足不同数据类型的业务需要,提高代码的执行效率,使代码简单明了. 泛型方法 该方法在调用时可以接收不同类型的参数.根据传递给泛型方法的参数类型,编译器适当 ...
 - Java对象的序列化和反序列化[转]
		
Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...
 
随机推荐
- win10 python27pyhton36共存
			
先前安装了python36 然后安装python27,安装步骤如下 1. 到官网下载https://www.python.org/downloads/windows/,我的是win10 64位,选择了 ...
 - InstallShield 静默安装
			
可能先需要获取安装包参数,安装包参数获取/?或是/HELP InstallScrip工程 1. 在命令行窗口中使用 -R 参数(即record) 运行安装程序. 例如: Setup.exe -R or ...
 - hibernate框架学习之数据查询(本地SQL)
			
本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...
 - Ionic-轮播图ion-slide-box
			
官方用法介绍:http://www.ionic.wang/js_doc-index-id-44.html 用法 <ion-slide-box> <ion-slide> < ...
 - [转]golang中defer的使用规则
			
转载于:https://studygolang.com/articles/10167 在golang当中,defer代码块会在函数调用链表中增加一个函数调用.这个函数调用不是普通的函数调用,而是会在函 ...
 - BeautifulSoup解析器的选择
			
BeautifulSoup解析器 在我们使用BeautifulSoup的时候,选择怎样的解析器是至关重要的.使用不同的解析器有可能会出现不同的结果! 今天遇到一个坑,在解析某html的时候.使用htm ...
 - 1)requests模块
			
一:requests 介绍 requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装, 从而使得Pyt ...
 - yun
			
# Author:zhang# -*- coding:utf-8 -*-"""https://workyun.com/ 云端工作"""imp ...
 - CF767C Garland--树形dp
			
今天无聊的我又来切树形dp了,貌似我与树形dp有仇似的. n个节点的树 第i个节点权值为 n<=10^6 −100<=ai<=100 问是否能够删除掉两条边,使得该树分成三个不为空 ...
 - LeetCode(116):填充同一层的兄弟节点
			
Medium! 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *n ...