序列化ObjectOutputStream
java.io.ByteArrayOutputStream baos = new ByteArrayOutputStream();
java.io.ObjectOutputStream oos;
try {
oos = new ObjectOutputStream(baos);
oos.writeObject(object);// object:要序列化的对象
} catch (IOException e) {}
将对象序列化到输出流里(可以是文件流、字节流等等)
反序列化ObjectInputStream
从输入流中反序列化对象
java.io.ByteArrayInputStream bais =。。。;
java.io.ObjectInputStream ais;
try {
ais = new ObjectInputStream(bais);
Object bo = ais.readObject();
bs.setBo(bo);
}
ClassLoader相关序列化最重要的是反序列化时如何找到相关的class,这就涉及到反序列化的classloader机制。
ObjectInputStream通过resolveClass(ObjectStreamClass desc)方法去加载class,可以通过子类重写该方法加载class。Jsf中的反序列化重写了改方法,从当前线程加载。
ObjectInputStream
protected Class<?> resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
String name = desc.getName();
try {
//不是通过当前线程来加载类的,指定了classloader
return Class.forName(name, false, latestUserDefinedLoader());
} catch (ClassNotFoundException ex) {
Class cl = (Class) primClasses.get(name);
if (cl != null) {
return cl;
} else {
throw ex;
}
}
}
Jsf
public class ApplicationObjectInputStream extends ObjectInputStream {
public ApplicationObjectInputStream(){
super();
}
public ApplicationObjectInputStream(InputStream in) {
super(in);
}
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
return Class.forName(desc.getName(),true,
Thread.currentThread().getContextClassLoader());
}
}
使用子类反序列化
ais = new ApplicationObjectInputStream(bais);
Object bo = ais.readObject();
对象自己管理序列化package java.io;
public class ObjectStreamClass implements Serializable {
由对象控制自己属性(属性的属性的属性…)的序列化和反序列化。
Class MyObject{
Private ClassXX aa;
000000
Private ClassYY bb;
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();//对aa、bb等属性进行反序列化
…
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();//对aa、bb等属性进行序列化
oos.writeObject(getTransactionManager());
oos.writeObject(getTransactionAttributeSource());
}
java.lang.InstantiationException
当序列化类的某些方法中使用了直接new的 abstract class,会导致对象反序列化时报
java.lang.InstantiationException异常。原因未知。
如下代码导致MyClass不能被反序列化
public class MyClass implements Serializable {
public void test(){
Hidden hidden=new Hidden() {
public Map nameValue() {
Map<String, String> deployMap = new HashMap<String, String>();
deployMap.put("name", ProcessForm.BO_DEPLOYMENT_ID);
deployMap.put("value", bussinessObjectContex
.getDeployment().getId());
return deployMap;
}
};
hidden.haha;
}
public abstract class Hidden{
public abstract void haha(){}
}
分享到:
相关推荐
CVE-2020-2555——Coherence反序列化初探 安全防御 企业安全 安全架构信息安全 安全防御
* 图形序列化:实现图形的序列化,以便重复操作图元。 二、GDI+技术 * GDI+简介:GDI+是一种基于Windows的图形设备接口,提供了图形绘制、图形测量等功能。 * GDI+在二维图形软件中的应用:包括基本图形的绘制、...
在GWT中,数据对象需要实现Serializable接口,以便进行序列化和反序列化。GWT提供了标准的序列化策略,但也可以自定义实现,以处理更复杂的数据类型或优化性能。 标签中的“源码”意味着文章可能深入到GWT的内部...
总结,R语言为时间序列分析提供了丰富的功能和便捷的接口,无论是简单的数据可视化,还是复杂的模型构建和预测,都能轻松应对。通过深入学习和实践,我们可以利用R有效地挖掘时间序列数据中的隐藏模式和趋势,为决策...
本文提出了一种创新的快速自动化常温批量测定乙丙橡胶序列分布的方法,该方法采用先进的SampleXpress系列自动进样器和Bruker Avance III 400M型核磁共振波谱仪,结合Iconnmr、Topspin和Excel软件,旨在通过自动化...
5. 序列化:本论文实现了图形绘制结果的序列化,实现了重复操作图元的功能。 6. 共点运动:本论文实现了共点运动功能,可以动态观察二维空间中关联对象的共点运动,当某个对象的相关属性改变时,对其他关联对象的...
为了增强用户体验,系统还实现了图形元素的序列化,允许用户保存和重复操作图元,同时支持图元的选择、存储和修改,如拖动、改变大小等动态操作。 2D几何画板不仅限于静态图形的绘制,它还引入了共点运动的概念,...
ViewState的工作原理相当简单:在服务器端,当ASP.NET页面执行时,页面上所有控件的状态(比如Label控件的文本)会被序列化成一个加密的字符串,然后放入一个隐藏的HTML表单字段中。这个隐藏字段随着页面一起发送到...
该系统的核心特性之一是序列化,它可以保存和恢复绘制的图形状态,使得用户可以进行多次编辑和操作。同时,画板中的图元具有选择和修改的灵活性,比如选定图形后可进行拖动和大小调整,增强了交互性和动态性。 2D...
3. **实现消息映射**:每个操作对应的消息会被映射到Java方法上,通常每个数据成员都会生成相应的get和set方法,以支持数据的序列化和反序列化。 4. **配置通信细节**:工具还会生成用于配置通信细节的代码,如地址...
档案管理中应用的数据挖掘技术包括多种算法,如决策树、聚类分析、关联规则挖掘、文本挖掘、时间序列分析等。这些算法能够帮助从不同维度解读档案数据,发掘其中的模式和关联,从而提高档案资源的利用效率和管理效能...
【基于LSTM深度神经网络的精细化气温预报初探】这篇研究主要探讨了如何利用Long Short-Term Memory(LSTM)深度神经网络进行精细化气温预测。LSTM是一种特殊类型的循环神经网络(RNN),特别适合处理时间序列数据,...
这些关键词突出了论文的核心技术和概念,其中面向对象编程是软件设计的基础,命名空间用于组织代码,序列化确保数据的持久性,而GDI+则是实现2D图形绘制的关键技术,图元则指代图形的基本构造单元。 这篇毕业论文...
《初探类图》 统一建模语言(UML,Unified Modeling Language)是一种标准化的建模工具,专门用于软件开发中的需求分析、设计和可视化。它以图形化的方式描绘出系统的结构和行为,使得复杂的软件工程变得更加易于...
2. 数据类型多样化:除了文字记录,还包括图像、视频、基因序列等非结构化数据,需要更高级别的管理技术。 3. 数据价值挖掘:大数据技术可以揭示隐藏的医疗模式和趋势,为疾病预防、诊断和治疗提供支持。 二、医院...
例如,用户可以通过不同颜色对数据进行分类,通过不同的尺寸来表示数据的重要性或规模,或者使用时间序列数据来观察变化趋势。 文章还提到了信息可视化技术的分类,其中Daniel A. Keim将信息可视化技术大致分成六类...