Java中对象的序列化详解及实例
Java中对象的序列化详解及实例
把java对象转化为字节序列的过程称为对象的序列化。
把字节序列恢复为java对象的过程称为对象的反序列化。
对象序列化的用途:
1.把对象的字节序列永久的保存到硬盘上,通常存放在一个文件中
2.在网络上传送对象的字节序列化
void writeObject(Object obj) 方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中(将指定的对象写入 ObjectOutputStream。)
void readObject()方法 从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回( 从 ObjectInputStream 读取对象。)
只有实现了Serializable和Externalizable接口的类对象才能被序列化。
Externalizable接口继承自Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而实现Serializable接口类可以采用默认的序列化方式
public static void readObj()throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt")); Person p = (Person)ois.readObject(); System.out.println(p); ois.close(); }
public static void writeObj()throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt")); oos.writeObject(new Person("lisi0",399,"kr")); oos.close(); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
java 对象的序列化和反序列化详细介绍
最近周末,对java 的基础知识做了一个整理,其中java 序列化和反序列化的资料进行了详细整理,这里做个笔记,希望也能帮助到读到此文的朋友. 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是
-
Java序列化和反序列化_动力节点Java学院整理
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s
-
详解Java 对象序列化和反序列化
之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反.在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候.基于此,Java中对象的序列化机制就可以很好的解决这种操作.本篇就简单的介绍Java对象序列化,主要内容如下: 简洁的代码实现 序列化实现的基本算法 两种特殊的情况 自定义序列化机制 序列化的版本控制 一.简洁的代码实现 在介绍对象序列化的使用方法之前,先看看
-
Java 序列化和反序列化实例详解
Java 序列化和反序列化实例详解 在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列化,接受者将对象反序列化,下面就是一个很好的例子! 1.实体-Employee import java.io.Serializable; public class Employee implements Serializable{ /** * */ private static final long serialVersionUID = 1L; publi
-
Java实现几种序列化方式总结
0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生序列化方法即通过Java原生流(InputStream和OutputStream之间的转化)的方式进行转化.需要注意的是JavaBean实体类必须实现Serializable接口,否则无法序列化.Java原生序列化代码示例如下所示: package serialize; import java.io
-
java中fastjson生成和解析json数据(序列化和反序列化数据)
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>) 2.通过一个android程序测试fastjson的用法. fastjson简介: Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack
-
java 序列化与反序列化的实例详解
1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送.那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的.如何做到呢?这就需要Java序列化与反序列化了.换句话说,一方面,发送方需要把这个Java对象转换为字
-
浅谈java中为什么实体类需要实现序列化
当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存,为了解决这个问题我们使用一种技术:session的持久化. 什么是session的持久化? web服务器会把暂时不活动的并且没有失效的HTTPSession对象转移到文件系统或数据库中储存,服务器要用时在把他们转载到内存. 把Session对象转移到文件系统或数据库中储存就需要用到序列化: jav
-
Java中对象的序列化详解及实例
Java中对象的序列化详解及实例 把java对象转化为字节序列的过程称为对象的序列化. 把字节序列恢复为java对象的过程称为对象的反序列化. 对象序列化的用途: 1.把对象的字节序列永久的保存到硬盘上,通常存放在一个文件中 2.在网络上传送对象的字节序列化 void writeObject(Object obj) 方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中(将指定的对象写入 ObjectOutputStream.) void readObject()方法 从
-
java 中 阻塞队列BlockingQueue详解及实例
java 中 阻塞队列BlockingQueue详解及实例 BlockingQueue很好的解决了多线程中数据的传输,首先BlockingQueue是一个接口,它大致有四个实现类,这是一个很特殊的队列,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被唤醒继续操作.
-
Java中的Static class详解及实例代码
Java中的Static class详解 Java中的类可以是static吗?答案是可以.在Java中我们可以有静态实例变量.静态方法.静态块.类也可以是静态的. java允许我们在一个类里面定义静态类.比如内部类(nested class).把nested class封闭起来的类叫外部类.在java中,我们不能用static修饰顶级类(top level class).只有内部类可以为static. 静态内部类和非静态内部类之间到底有什么不同呢?下面是两者间主要的不同. (1)内部静态类不需
-
Java中的代理模式详解及实例代码
java 代理模式详解 前言: 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为"代理"的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务. 简单来说代理模式就是通过一个代理对象去访问一个实际对象,并且可以像装饰模式一样给对象添加一些功能. 静态代理 所谓静态代理即在程序运行前代理类就已经存在,也就是说我们编写代码的时候就已经把代理类的代码写好了,而动态代理则
-
Java中的final关键字详解及实例
Java中的final关键字 1.修饰类的成员变量 这是final的主要用途之一,和C/C++的const,即该成员被修饰为常量,意味着不可修改. 上面的代码对age进行初始化后就不可再次赋值,否则编译时会报类似上图的错误. 如果修饰的是引用类型的变量,那么初始化后就不能让他指向另一个对象,如下图所示 2.修饰方法 用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的. 注:类的private方法会
-
Java中Arrays.asList()方法详解及实例
Arrays.asList() 是将数组作为列表. 问题来源于: public class Test { public static void main(String[] args) { int[] a = {1, 2, 3, 4}; List list = Arrays.asList(a); System.out.println(list.size()); //1 } } 期望的输出是 list 里面也有4个元素,也就是 size 为4,然而结果是1. 原因如下: 在 Arrays.asLis
-
Java中获取文件大小的详解及实例代码
Java 获取文件大小 今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法,当InputStream未进行read操作时,available()的大小应该是等于文件大小的.但是在处理大文件时,后者会发生问题.我们来看一下: 在例子中,我使用了CentOS 6.5 的安装镜像文件,主要是考虑到这个文件足够大(大于2GB). 1.使用File的length()方法 publi
-
Java中浅拷贝和深拷贝详解
目录 Java浅拷贝深拷贝 实现浅拷贝 实现深拷贝 Java浅拷贝深拷贝 浅拷贝和深拷贝涉及到了Object类中的clone()方法 实现浅拷贝 浅拷贝的实现需要类重写clone()方法 浅拷贝会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝 如果属性是基本类型,拷贝的就是基本类型的值: 如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象,导致两个对象的引用不等. 实现浅拷贝很简单只需要将类实现Cloneable接口然后重写c
-
Java中自动生成构造方法详解
Java中自动生成构造方法详解 每个类在没有声明构造方法的前提下,会自动生成一个不带参数的构造方法,如果类一但声明有构造方法,就不会产生了.证明如下: 例1: class person { person(){System.out.println("父类-person");} person(int z){} } class student extends person { // student(int x ,int y){super(8);} } class Rt { public st
-
基于Java中的StringTokenizer类详解(推荐)
StringTokenizer是字符串分隔解析类型,属于:Java.util包. 1.StringTokenizer的构造函数 StringTokenizer(String str):构造一个用来解析str的StringTokenizer对象.java默认的分隔符是"空格"."制表符('\t')"."换行符('\n')"."回车符('\r')". StringTokenizer(String str,String delim)
随机推荐
- 什么是web2.0?
- jQuery实现的页面遮罩层功能示例【测试可用】
- Vue2.x中的父子组件相互通信的实现方法
- node使用Koa2搭建web项目的方法
- 修改flash之必备软件硕思闪客精灵3.3注册破解版下载
- spring boot项目中MongoDB的使用方法
- Python中的包和模块实例
- 使javascript也能包含文件
- 布局遇到的问题 非常不错的见解
- VBS教程:函数-ScriptEngineMajorVersion 函数
- AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
- Jquery ui css framework
- android 中 webview 怎么用 localStorage
- ServU7不支持中文名的解决办法(Serv-U中文目录和文件名变乱码问题)
- 关于 文本框默认值 的操作js代码
- 解除使用Linux分区工具时给大家带来的困扰
- Java Base64解码错误及解决方法
- mysql免安装版配置与修改密码的教程
- 基于cropper.js封装vue实现在线图片裁剪组件功能
- vue+高德地图写地图选址组件的方法