`
javaeyes
  • 浏览: 30070 次
  • 来自: ...
社区版块
存档分类
最新评论

一个比较偏的问题,java序列化

阅读更多
做rome 解析RSS的时候发现一个奇怪的现象,先看代码
		PipedInputStream pipin = new PipedInputStream();
		PipedOutputStream pipout = new PipedOutputStream(pipin);
		ObjectOutputStream out = new ObjectOutputStream(pipout);
		SyndEntry entry = new SyndEntryImpl();
		System.out.println(ss);
 		out.writeObject(entry);
		out.close();

我原想把SyndEntryImpl的实例进行对象序列化存到文件中,但是程序运行到out.writeObject(entry);这一句的时候就停住了,没有任何错误,cpu也正常,SyndEntryImpl这个类已经声名实现了Serializable。这难道是java的bug?
分享到:
评论
8 楼 xin_wang 2007-05-23  
javaeyes 写道
做rome 解析RSS的时候发现一个奇怪的现象,先看代码
		PipedInputStream pipin = new PipedInputStream();
		PipedOutputStream pipout = new PipedOutputStream(pipin);
		ObjectOutputStream out = new ObjectOutputStream(pipout);
		SyndEntry entry = new SyndEntryImpl();
		System.out.println(ss);
 		out.writeObject(entry);
		out.close();

我原想把SyndEntryImpl的实例进行对象序列化存到文件中,但是程序运行到out.writeObject(entry);这一句的时候就停住了,没有任何错误,cpu也正常,SyndEntryImpl这个类已经声名实现了Serializable。这难道是java的bug?

你这段代码有问题:pipin这个stream需要运行在另外一个线程,来读取写入管道的数据, 下面这段可以运行的。

final PipedInputStream pipin = new PipedInputStream();
        final PipedOutputStream pipout = new PipedOutputStream(pipin);
        new Thread(new Runnable() {
            public void run() {
                int c = -1;
                try {
                    while ((c = pipin.read()) >= 0) {
                        System.out.print(c);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        ObjectOutputStream out = new ObjectOutputStream(pipout);
        SyndEntry entry = new SyndEntryImpl();
        System.out.println("ss");
        out.writeObject(entry);
        out.flush();
        out.close();
7 楼 javaeyes 2007-05-22  
这个问题一定要顶上去
6 楼 javaeyes 2007-05-22  
这个问题没有人知道吗?
5 楼 javaeyes 2007-05-21  
不是pipe的问题,因为其它的对象是可以的,我上传个rome,大家也试试
4 楼 javaeyes 2007-05-21  
楼上说的这个该怎么generated?那个类是Rome自带的实现类,也跟平时我们写Serializable的类一样并没有指定serialID,但是自己写的类都是能够writerObject的呀,怪就怪在这里了
3 楼 jasongreen 2007-05-21  
假如像你说的一样,运行到这一步就停住了,没有任何错误,那说明,程序正在等待,你用了pipe,我认为是你的io操作写的有问题,你可以试试先写到文件里

FileOutputStream fileOut = ...;
ObjectOutputStream out = new ObjectOutputStream(fileOut);  
2 楼 galaxystar 2007-05-21  
序列户serialID有没有generated?
1 楼 javaeyes 2007-05-21  
大家都来看看 我觉得这个问题比较偏,大家讨论下呀

相关推荐

    java序列化和反序列化的方法

    Serializable 接口是一个标记接口,不包含任何方法,但它告诉 Java虚拟机(JVM)该类可以被序列化。 在上面的代码中,我们可以看到 UserMessage 类实现了 Serializable 接口,这意味着该类可以被序列化。在发送端,...

    Java序列化_Java序列化结构_

    Java序列化是Java平台中的一种持久...总的来说,Java序列化是Java编程中一个重要的特性,但它也有其局限性和安全风险。理解和熟练掌握序列化机制,以及知道如何避免其潜在问题,对于任何Java开发者来说都是至关重要的。

    Java序列化

    Java序列化是Java平台中的一种标准机制,允许将对象的状态转换为...通过以上知识点的学习,你可以对Java序列化有深入的理解,无论是理论还是实践,都能为你在开发过程中处理对象持久化、数据传输等问题提供有力支持。

    java反序列化工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...

    java 序列化时排除指定属性

    Java序列化是Java平台提供的一种持久化机制,它允许我们将一个Java对象转换为字节流,以便存储到磁盘上,或者通过网络进行传输。这使得我们可以保存和恢复对象的状态。实现序列化的类需要实现`Serializable`接口,...

    java 序列化代码示例

    总结,Java序列化是一个强大的工具,但使用时需注意其潜在的风险和性能影响。理解序列化的工作原理,并合理运用,可以在许多场景下提高软件的灵活性和可维护性。在实际项目中,结合淘宝等大型系统的具体需求,序列化...

    java 对象的序列化与反序列化

    1. **序列化标识符(SerialVersionUID)**:Java允许你为每个可序列化的类定义一个唯一的`serialVersionUID`,默认是由JVM根据类的结构计算出来的。如果类的版本更新导致结构变化,而此值未做更新,反序列化时会抛出`...

    java序列化实现演示

    在给定的链接"Java序列化机制(2)- serialVersionUID 实验"中,博主通过一个实验详细解释了`serialVersionUID`的作用和重要性。实验可能包括以下步骤: 1. 创建一个实现`Serializable`接口的简单类,并运行序列化...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。

    java序列化(Serializable)的作用和反序列化

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...

    java序列化原理与算法

    首先,我们需要创建一个实现了`Serializable`接口的类`TestSerial`,这样Java序列化机制才能处理这个类的对象。 接下来,我们编写代码将对象序列化并输出为字节流,存储在一个临时文件`temp.out`中。 ```java ...

    Java序列化的机制和原理

    总之,Java序列化是一个强大的工具,它使得对象能够在不同的环境之间交换和恢复,但同时也需要注意安全问题,因为序列化可能暴露敏感信息。为了提高效率和安全性,有时可以考虑使用自定义的序列化方法或者其他的序列...

    Java实现序列化例子

    Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...

    java序列化和反序列化

    ### Java序列化与反序列化详解 #### 一、Java序列化概述 Java序列化(Serialization...综上所述,Java序列化提供了一种简单有效的方式来处理对象的持久化和传输需求,但开发者也需要考虑其可能带来的性能和安全问题。

    java自动序列化

    3. `java.io.NotSerializableException`: 当尝试序列化一个未实现Serializable接口的对象时抛出的异常。 4. `sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`(非标准API):用于将字节数组编码为Base64字符串,...

    java对象序列化和反序列化

    2. ** serialVersionUID**:为了保证序列化版本的兼容性,每个可序列化类应定义一个`serialVersionUID`字段。如果不显式定义,Java会自动生成一个,但当类结构改变时可能导致异常。 3. **ObjectInputValidation**:...

    Java_序列化的高级认识

    Java序列化作为Java技术体系中的一个重要组成部分,其核心功能在于能够将Java对象转换成字节流,从而实现对象的持久化存储或是通过网络传输。然而,序列化的应用远不止于此,它还涉及到一系列复杂的概念和技术细节,...

    07-Java序列化面试题(10题)-新增.pdf

    Java序列化面试题(10题) 在 Java 中,序列化是一种用于处理对象流的机制,它可以将对象的内容进行流化,使其可以被读写和传输。下面是 10 个与 Java 序列化相关的面试题目: 1. 什么是 Java 序列化,如何实现 ...

    Java 文件 序列化 读写

    - 在Java中,如果一个类想要实现序列化,只需实现`Serializable`接口即可,但该接口没有任何方法,只是一个标志接口。 3. **序列化过程**: - 使用`ObjectOutputStream`类的`writeObject()`方法将对象序列化到...

    Java反序列化工具.zip

    在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络传输中将对象从一个系统传输到另一个系统。反序列化漏洞则是一个安全问题,攻击者可以通过构造恶意的序列化数据来利用这种漏洞,执行任意代码或...

Global site tag (gtag.js) - Google Analytics