`
hehuabing
  • 浏览: 6265 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 序列化的一个问题,一个方法导致序列化失败,找根因,请看代码注释

阅读更多
被序列化的对象:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

public class Student implements Serializable {

/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;

public List list;

public transient Map map;

public String a = "hhh";

public Age age;

public String b;

private Map attributes;

        /**
           就是有由于这个方法导致序列化失败,报java.io.OptionalDataException
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1267)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
   at Student.readObject(Student.java:29)异常
        **/
private void readObject(ObjectInputStream ois) throws IOException,
ClassNotFoundException {
ois.defaultReadObject();
attributes = (Map) ois.readObject();//将它注释掉以后就能通了
}
}
=========================我是风格符号===================================================================
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
//序列化代码,就是个深克隆
public class Copy {
public static Student deepCopyPageCom(Student pageCom) {
Student stu = null;
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(pageCom);

bais = new ByteArrayInputStream(baos.toByteArray());
ois = new ObjectInputStream(bais);
stu = (Student) ois.readObject();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
closeAllStream(baos, oos, bais, ois);
}
return stu;
}

/**
* 关闭所有输入输出流
*
* @param baos
* @param oos
* @param bais
* @param ois
* @see [类、类#方法、类#成员]
*/
private static void closeAllStream(ByteArrayOutputStream baos,
ObjectOutputStream oos, ByteArrayInputStream bais,
ObjectInputStream ois) {
if (null != baos) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != oos) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();

}
}
if (null != bais) {
try {
bais.close();
} catch (IOException e) {
e.printStackTrace();

}
}
if (null != ois) {
try {
ois.close();
} catch (IOException e) {

e.printStackTrace();
}
}

}
}

实在在是很费劲啊,不知是否有人遇到同样的问题,我想知道根因,jar包中引用到的类中有个方法被别人删掉了吗。
分享到:
评论

相关推荐

    Java序列化技术的探讨.pdf

    "Java序列化技术的探讨" Java序列化技术是Java中的重要技术,在RMI、AJAX、Web Service等方面都有应用。本文将介绍几种常用的Java序列化技术,并通过比较、分析这些技术在功能、序列化后的字节数和序列化、反序列化...

    java的model,xml序列化(简单的,复杂的)方法都有

    Java模型(Model)和XML序列化是Java开发中常见的数据处理技术,主要用于对象与XML文档之间的转换。在本文中,我们将深入探讨这两种序列化方法,包括简单和复杂的情况。 首先,让我们理解Java Model。在软件工程中...

    kryo实例,对java object的序列化和反序列化

    kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...

    一个 Java 序列化,反序列化库,用于将 Java 对象转换为 JSON 并转回.zip

    一个 Java 序列化/反序列化库,用于将 Java 对象转换为 JSON 并转回格森Gson 是一个 Java 库,可用于将 Java 对象转换为 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。Gson 可以处理任意 Java ...

    PersonInfo[XML序列化]

    `PersonInfo[XML序列化]`这个主题可能涉及到一个具体的示例,演示如何对一个名为`PersonInfo`的对象进行XML序列化和反序列化操作。 首先,我们来了解XML序列化的基础。在.NET中,我们可以使用`System.Xml....

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    免费开源!!一个 Java 序列化/反序列化库,用于将 Java 对象转换为 JSON 并返回

    Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。Gson 可以处理任意 Java 对象,包括您没有源代码的现有对象。 有一些开源项目可以将 Java 对象...

    java RMI实现代码

    1. 客户端创建一个远程接口的引用,通过` LocateRegistry.getRegistry()` 获取RMI注册表,并使用`Registry.lookup()` 方法查找远程对象。 2. 服务器端通过`UnicastRemoteObject.exportObject()` 方法导出远程对象,...

    Java开发技术大全(500个源代码).

    Student.java 定义一个用来序列化的类 ThreadIn.java 接收数据用的线程类 ThreadOut.java 发送数据用的线程类 TypeFile.java 显示文件内容的类 useScanner.java 用Scanner接收用户的输入 第8章 示例描述:本章...

    LCS 最长公共子序列 JAVA

    总之,LCS问题的Java实现是一个典型的动态规划问题,它展示了如何利用记忆化搜索来解决复杂度较高的序列比较问题。通过对"Lcs_Agr.java"源代码的分析,我们可以深入理解这个问题的解决方案,并从中学习到动态规划的...

    java青鸟学士后电影院售票项目(完整注释+javadoc)新手易懂

    本项目“Java青鸟学士后电影院售票项目”提供了一个全面的示例,旨在帮助新手理解并掌握核心的Java技术,包括类的设计、异常处理以及序列化与反序列化等关键概念。本文将深入探讨这些知识点,以期为读者带来丰富的...

    最新Java 基本算法代码示例+注释

    该压缩包中的"suanfa"可能包含一系列的Java源代码文件,每个文件都对应一个或多个基础算法的实现,并且配有详尽的注释,以帮助读者理解每一步的目的和逻辑。下面我们将深入探讨一些常见的Java基础算法及其重要性: ...

    java大作业 一个时钟程序

    【Java大作业——一个时钟程序】 在Java编程学习中,设计一个时钟程序是一项常见的实践任务,旨在帮助学生巩固面向对象编程的概念、线程处理以及用户界面设计。这个Java大作业可能涉及到以下几个核心知识点: 1. *...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java反射源码示例+注释详细

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射API提供了对类、接口、字段和方法等元数据的访问,使得我们可以“看穿”类的封装性,实现一些在编译...

    用JAVA编写的五子棋网络对战(附源代码)

    在本项目中,我们探讨的是一个使用JAVA编程语言实现的五子棋网络对战系统。这个系统允许两个玩家通过互联网进行实时对弈,提供了一种便捷的线上游戏体验。下面将详细阐述该项目的关键技术和实现原理。 1. **JAVA...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java编写的一个简单bbs网站完整代码

    这是一个基于Java技术构建的简单BBS(Bulletin Board System,论坛)网站的完整源码资源。这个项目对于初学者来说是一个很好的学习平台,可以帮助他们理解Web开发的基础知识,并且能够实践和提升自己的编程技能。 ...

    Java代码编写一般性指导

    1. **测试main()**:每个类都考虑加入一个`main()`方法,其中包含用于测试该类功能的代码。这有助于在开发过程中进行快速测试,并为其他开发者提供使用示例。 #### 四、方法设计 1. **简短明确**:方法应该简洁、...

    阿里巴巴Java代码规范PDF.zip

    以上只是《阿里巴巴Java代码规范》中的一部分要点,完整规范还包括更多的细节,如类型转换、资源关闭、枚举使用、序列化等。遵循这些规范,可以帮助开发者编写出更加专业、高效且易于维护的Java代码。

Global site tag (gtag.js) - Google Analytics