- 浏览: 347638 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
孙大圣123:
大神,你分享的castor dtd文件中没有field-han ...
Castor (二) -- 自定义映射 -
ananeye:
建议举些通俗的例子,说明下。光这样讲,不好懂。
ORACLE 索引原理 -
度_java:
1.不在不同的机器上实现集群功能,除非他们的时钟同步精确到秒。 ...
Quartzs -- Quartz.properties 配置 -
2047699523:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
MAVEN3--(三)创建MAVEN项目 -
qgm168:
写的不错,借用啦,哈哈,多谢!
自定义POI EXCEL模板
简介:
在某些情况下,可能需要改变Serializable类的默认序列化过程,或者需要对一个没有实现Serializable的属性进行序列化,此时就需要自定义序列化流程。
实现:
1)目标类实现Serializable,上述两种情况中的属性设为transient,通过增加下列两个方法来自定义该属性的序列化过程
private void writeObject(java.io.ObjectOutputStream out) throws IOException;
private void readObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException;
实例
Student.java
package com.siyuan.serializable; import java.io.IOException; import java.io.Serializable; public class Student implements Serializable{ private static final long serialVersionUID = -8218974228671917830L; private int id; private String stuNo; private String name; private transient Teacher teacher; public Student(){ } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStuNo() { return stuNo; } public void setStuNo(String stuNo) { this.stuNo = stuNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } @Override public String toString() { StringBuilder result = new StringBuilder(); result.append("Student["); result.append("id=").append(this.id); result.append(",stuNo=").append(this.stuNo); result.append(",name=").append(this.name); result.append(",teacher=").append(this.teacher); result.append("]"); return result.toString(); } private void writeObject(java.io.ObjectOutputStream out) throws IOException { System.out.println("writeObject ... "); out.defaultWriteObject(); out.writeInt(this.teacher.getId()); out.writeObject(this.teacher.getTeachNo()); out.writeObject(this.teacher.getName()); } private void readObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException { System.out.println("readObject ... "); in.defaultReadObject(); this.teacher = new Teacher(); this.teacher.setId(in.readInt()); this.teacher.setTeachNo((String) in.readObject()); this.teacher.setName((String) in.readObject()); } }
Teacher
package com.siyuan.serializable; public class Teacher { private int id; private String teachNo; private String name; public Teacher() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTeachNo() { return teachNo; } public void setTeachNo(String teachNo) { this.teachNo = teachNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { StringBuilder result = new StringBuilder(); result.append("Teacher["); result.append("id=").append(this.id); result.append(",teachNo=").append(this.teachNo); result.append(",name=").append(this.name); result.append("]"); return result.toString(); } }
StudentSerializableTest
package com.siyuan.serializable.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.siyuan.serializable.Student; import com.siyuan.serializable.Teacher; public class StudentSerializableTest { /** * @param args * @throws IOException * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { // TODO Auto-generated method stub Student stu = new Student(); stu.setId(1); stu.setStuNo("001"); stu.setName("siyuan"); Teacher teacher = new Teacher(); teacher.setId(101); teacher.setTeachNo("101"); teacher.setName("carro"); stu.setTeacher(teacher); System.out.println(stu); System.out.println("Serialized begin..."); ByteArrayOutputStream output = new ByteArrayOutputStream(); ObjectOutputStream objOutput = new ObjectOutputStream(output); objOutput.writeObject(stu); System.out.println("Serialized end..."); System.out.println("Deserialized begin..."); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); ObjectInputStream objInput = new ObjectInputStream(input); Student stuDe = (Student) objInput.readObject(); System.out.println("Deserialized end..."); System.out.println(stuDe); } }
运行结果:
Student[id=1,stuNo=001,name=siyuan,teacher=Teacher[id=101,teachNo=101,name=carro]] Serialized begin... writeObject ... Serialized end... Deserialized begin... readObject ... Deserialized end... Student[id=1,stuNo=001,name=siyuan,teacher=Teacher[id=101,teachNo=101,name=carro]]
2)通过实现Externalizable来完全控制目标类的序列化过程
实例
StudentCp.java
package com.siyuan.serializable; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; public class StudentCp implements Externalizable{ private static final long serialVersionUID = -8218974228671917830L; private int id; private String stuNo; private String name; private Teacher teacher; public StudentCp(){ } public void copyFrom(StudentCp cp) { this.id = cp.id; this.stuNo = cp.stuNo; this.name = cp.name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStuNo() { return stuNo; } public void setStuNo(String stuNo) { this.stuNo = stuNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } @Override public String toString() { StringBuilder result = new StringBuilder(); result.append("Student["); result.append("id=").append(this.id); result.append(",stuNo=").append(this.stuNo); result.append(",name=").append(this.name); result.append(",teacher=").append(this.teacher); result.append("]"); return result.toString(); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { System.out.println("readExternal ... "); this.setId(in.readInt()); this.setStuNo((String) in.readObject()); this.setName((String) in.readObject()); this.teacher = new Teacher(); this.teacher.setId(in.readInt()); this.teacher.setTeachNo((String) in.readObject()); this.teacher.setName((String) in.readObject()); } @Override public void writeExternal(ObjectOutput out) throws IOException { System.out.println("writeExternal ... "); out.writeInt(this.id); out.writeObject(this.stuNo); out.writeObject(this.name); out.writeInt(this.teacher.getId()); out.writeObject(this.teacher.getTeachNo()); out.writeObject(this.teacher.getName()); } }
StudentCpSerializableTest
package com.siyuan.serializable.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.siyuan.serializable.StudentCp; import com.siyuan.serializable.Teacher; public class StudentCpSerializableTest { /** * @param args * @throws IOException * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { // TODO Auto-generated method stub StudentCp stu = new StudentCp(); stu.setId(1); stu.setStuNo("001"); stu.setName("siyuan"); Teacher teacher = new Teacher(); teacher.setId(101); teacher.setTeachNo("101"); teacher.setName("carro"); stu.setTeacher(teacher); System.out.println(stu); System.out.println("Serialized begin..."); ByteArrayOutputStream output = new ByteArrayOutputStream(); ObjectOutputStream objOutput = new ObjectOutputStream(output); objOutput.writeObject(stu); System.out.println("Serialized end..."); System.out.println("Deserialized begin..."); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); ObjectInputStream objInput = new ObjectInputStream(input); StudentCp stuDe = (StudentCp) objInput.readObject(); System.out.println("Deserialized end..."); System.out.println(stuDe); } }
运行结果:
Student[id=1,stuNo=001,name=siyuan,teacher=Teacher[id=101,teachNo=101,name=carro]] Serialized begin... writeExternal ... Serialized end... Deserialized begin... readExternal ... Deserialized end... Student[id=1,stuNo=001,name=siyuan,teacher=Teacher[id=101,teachNo=101,name=carro]]
参考资料:
http://www.javapractices.com/home/HomeAction.do
发表评论
-
ResourceBundle
2013-12-16 11:04 5571.简介 资源包包含特定于语言环境的对象。当程 ... -
JSR303(一) 简介
2013-09-18 17:18 15641.简介 数据校验是任何一个应用程序都会用到的功能,无论 ... -
JVM内存管理
2013-07-29 17:41 11271.Java中哪些组件需要用到内存 1)堆 用于存储J ... -
JVM体系结构
2013-07-26 15:43 34531.关于JVM 1)它是一个 ... -
关于ClassLoader
2013-07-26 10:24 11081.简介 ClassLoader,顾 ... -
ZIP压缩和解压
2013-05-29 17:32 9141.简介 JAVA通过ZipInputStream和Zip ... -
nio(三) FileChannel
2013-05-28 16:27 17411.简介 JDK1.4在IO的基础上引入NIO, ... -
nio(二)Buffer的子类
2013-05-24 17:34 13371.简介 Buffer针对除boolean之外的每个基本类 ... -
nio(一)Buffer
2013-05-23 11:23 13131.简介 Buffer是一种用 ... -
ProcessBuilder & Process
2013-05-21 16:40 10491.ProcessBuilder介绍 此类用于创建操作系统 ... -
String编码(五) 文件编码检测
2013-03-26 11:13 19091.简介 为了防止读取编码不确定的文本文件时出现乱码现象 ... -
String编码(四) 关于文件处理
2013-03-25 17:01 10641.简介 分析JAVA对文件 ... -
String编码(三) 关于编译
2013-03-19 15:42 9511.疑问 JDK编译JAVA文件生成的字节码.class ... -
String编码(二) 证明JAVA的char编码为UTF-16
2013-03-19 09:06 56111.简介 通过程序证明JAVA的char内部编码为UTF- ... -
String编码(一) 关于String.getBytes()
2013-03-18 17:46 13731.简介 本次学习的目的是为了弄清JAVA在不同情况下对 ... -
JSP自定义标签
2012-10-16 23:30 27451.简介 标签是一种XML元素,通过标签可以使JSP网 ... -
HttpServletResponse.getWriter()用完之后需不需要调用close()
2012-05-24 22:24 11799HttpServletResponse.getWriter() ... -
JAVA序列化(二) 特殊类型的序列化 单例模式和枚举类实现
2012-05-14 00:15 4034简介 由于反序列化时会重新生成一个新的对象实例,这与单例模 ... -
JAVA序列化(一) Serializable
2012-05-13 23:49 1065简介: 本文主要介绍的是JAVA序列化的最佳实践,所以直接跳 ... -
JAVA中的REGEXP非捕获组
2011-11-02 23:30 23281.简介 JAVA中REGEXP的非 ...
相关推荐
主要介绍了实例解析Json反序列化之ObjectMapper,json自定义序列化的方法,需要的朋友可以了解下。
本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了java.io.Serializable接口才能被序列化 transient的作用是什么 怎么自定义序列...
jackson工具库,支持JSON,XML格式实现java序列化反序列化操作。在XML格式进行反序列化时有一定的限制
springboot工程通过自定义response注解、java反射机制、自定义java拦截器、自定义功能类实现WebMvcConfigurer接口等功能,实现自定义规范化返回数据结构。
主要介绍了 Java 序列化详解及简单实现实例的相关资料,使用序列化目的:以某种存储形式使自定义对象持久化,将对象从一个地方传递到另一个地方,需要的朋友可以参考下
实现了通过gson对enum的自定义转化过程,不需要预先定义enmu,并且不需要修改gson源码,在框架顶层处理基本可以达到对enum的抽象管理。
应用于java开发 在使用redis缓存时 由于多线程问题造成数据同步延迟 解决redis缓存穿透问题
这两种序列化方式在处理非自定义类型时,没有区别。仅对自定义类型的处理方式不同,性能上也没有太大差别,基本相同,通过下面的对比就可以看出这一点来。 本文对比了Hprose、.NET BinaryFormatter、SoapFormatter、...
本篇文章主要介绍了java如何利用FastJSON、Gson、Jackson三种Json格式工具自定义时间序列化,具有一定的参考价值,有兴趣的可以了解一下
它允许发送纯文本(JSON,XML,CSV或任何其他自定义格式)类型的kafka消息以及Java序列化的对象。 入门 Pepper-Box包含四个主要组件 PepperBoxKafkaSampler :这是jmeter Java采样器将消息发送到kafka。 Pepper-...
目标提供简单的toJson()和fromJson()方法将Java对象转换为JSON,反之亦然允许将已有的不可修改的对象与JSON相互转换Java泛型的广泛支持允许对象的自定义表示支持任意复杂的对象(具有深层继承层次结构和泛型类型的...
案1:修改序列化byte数据该法可解决序列化最终数据的serialVesionUID不致,但法解决Object的serialVesionUID不案2:反射修改s
如果可用,数据绑定和“流”(自定义打包和解包)实现都经过测试。 使用 1、10、100 和 1000 KB 大小的有效负载评估两种不同类型: :使用原始类型、字符串、列表和简单的 POJO; 和 : 添加数组、枚举、UUID、...
根据XML定义的结构,在字节数组和POJO之间进行序列化和反序列化。 注意 0.5.1或更高版本支持Android平台。 特征 使用XML定义数据结构。 将字节数组映射到POJO。 支持自定义数据类型。 使用基本算术计算大小或...
JSON序列化/反序列化库有很多选项,为什么我们需要另一个? 如果您也是JSON的拥护者,但讨厌JSON标准的限制,使其很难用作配置格式,但仍然不想将JSON放弃给YAML(JSON很好,为什么需要另一个非常难看的标记语言)...
中文 | 功能容易上手,安装即可快速使用基于注解和JSONPath工作的反序列化/序列化流程,直观、方便、容易使用支持复杂实体类和变量的反序列化等对泛型的良好支持不断更新的内置注解,方便处理数据可自定义注解,...
java操作XML与序列化, 自定义队列并附带测试用例 3.操作文件夹;3个例子包,可直接运行
主要讲解了System类、Object类、Arrays类、Cloneable接口、IO系统输入输出类及装饰类、IO系统文本读写工具类、IO系统二进制读写工具类、对象序列化工具类、File类及文件搜索工具类、java异常机制及自定义异常类、...
EasyML为JDK类提供广泛的支持,还支持通过用户设置,用户扩展或Java序列化API进行自定义。 EasyML提供以下支持:-读写XML文本和/或org.w3c.dom文档-Java Collections框架-Java序列化框架-多线程-Java泛型和功能性...
Morphia/Jackson Java 8 可选示例Morphia (mongoDB) 和 Jackson (JSON) 序列化都可以用来序列化/反序列化新的 Java 8 Optional 类型。 对于 Jackson,您只需要注册 JDK8 模块。 对于 Morphia,您需要为 Optional ...