`
myworkfirst
  • 浏览: 44689 次
文章分类
社区版块
存档分类
最新评论

对象序列化出错

阅读更多


import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.FileOutputStream;

import java.io.ObjectInputStream;
import java.io.FileInputStream;

//序列化类
class Student implements Serializable{
 private String name;
 private int age;
 
 public Student(String name,int age){
  this.name=name;
  this.age=age;
 } 
 public String getName(){
  return this.name; 
 }
 public int getAge(){
  return this.age; 
 }
}

public class TeseSeriable{
 public static void main(String []args) throws Exception{
  TeseSeriable  test=new TeseSeriable();
  
  //创建一个文件,以追加的方式向文件里写10个对象
  for(int i=0;i<10;i++){
   Student stu=new Student("jack"+i,19+i);
   test.writeToObject(stu,"test.txt");
  }
  
  Thread.sleep(1000);
  //一次性将10个对象反序列化出来,此方法出错.
  test.ListObject("test.txt");
  
 }
 //序化列方法
 public void writeToObject(Object obj,String fileName){
  try{
   ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(fileName,true));
   out.writeObject(obj);
   out.flush();
   out.close();
  }
  catch(Exception ex){
   ex.printStackTrace(); 
  }
 }
 //反序列化方法
 public Object readToObject(String fileName){
  Object obj=null;
  ObjectInputStream in=null;
  try{
    in=new ObjectInputStream(new FileInputStream(fileName));
   obj=in.readObject();
  }
  catch(Exception ex){
   ex.printStackTrace(); 
  }
  finally{
   try{
    in.close(); 
   }
   catch(Exception e){}
  }
  return obj;
 } 
 //列出所有对象
 public void ListObject(String fileName){
  try{
   ObjectInputStream in=new ObjectInputStream(new FileInputStream(fileName));
   //为什么读取第二个地象就报错呢?********************************************
   for(int j=0;j<10;j++){
    Student student=(Student)in.readObject();
    
    System.out.println(student.getName());
    System.out.println(student.getAge());
   }
   in.close();
  }
  catch(Exception ex){
   ex.printStackTrace(); 
  }
 }
}

============================

     我想实现的目地是,将10个对象写入到文件里,然后依次读出.

  现在写入到文件没有错,但在读到取时却只读到第一个对象,读第二个对象时就报错:

   java.io.StreamCorruptedException
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1301)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
        at TeseSeriable.ListObject(TeseSeriable.java:76)
        at TeseSeriable.main(TeseSeriable.java:38)

   有兴趣的朋友,可以看看.

分享到:
评论
4 楼 wanghaoxg05 2008-04-11  
我也遇到此类问题,我想用一个Collection 不可取
以为我们写日志文件并不是一次性写入 所以这个问题还是另外找方法解决
3 楼 myworkfirst 2007-08-22  
  我明白3楼意思,你是说把10个对象放进Collection里,然后再writeObject,但是Collection也有限吧,如果我有很多对象的话,还是不可取的.
2 楼 anxin587 2007-08-21  
是不是要把十个对象放到容器里面才能这样做啊!
1 楼 myworkfirst 2007-08-18  
   没有人知道吗?

相关推荐

    JSON工具,JS中JSON对象的序列化与反序列化

    比如下面的JS对象 var user=new Object(); user.name='吕洞宾'; user.friends=[{name:"铁拐李",sex:"男",friend:user},{name:"何仙姑",sex:"女",friend:user}]; 一般的解析工具都会出错 详细信息请参观 ...

    redis使用过程中由于序列化工具引起的问题

    在Redis中,当我们存储复杂的数据结构,如Java对象时,需要将对象转换为可存储的格式,这就是序列化的过程。默认情况下,Redis并不提供内置的序列化机制,而是依赖于客户端库的实现。在Java中,Spring Data Redis...

    自动生成C结构体到json的序列化、反序列化代码的方法

    序列化是指将数据结构或对象转换为可传输或可存储的格式,如JSON字符串。反序列化则是相反的过程,即从这种格式恢复原始数据结构或对象。在C语言中,由于缺乏内置的JSON支持,程序员通常需要编写自定义函数来实现这...

    IOS应用源码——自动序列化AutoEncodeDecode.zip

    这个项目的目标是简化iOS应用中的对象序列化和反序列化操作,提高开发效率。 一、对象序列化与反序列化 对象序列化是将内存中的对象转换为二进制流或者文本格式,以便于存储到磁盘或在网络上传输。反序列化则是将...

    Net序列化.doc

    其次,使用相应的格式化器将对象序列化到这个流中。以下是一个使用`BinaryFormatter`将对象写入文件的示例: ```csharp public static void WriteToFile(BaseballPlayer bp, String filename){ Stream str = File....

    数据通信-序列化协议 protocol json

    序列化协议是指将数据结构或对象转换成二进制串的过程,而反序列化则是将序列化后的二进制串反向还原成数据结构或者对象的过程。在本文中,我们将详细介绍序列化协议的重要性、现状、问题以及解决方案。 序列化协议...

    新手指南-序列化篇之二.docx

    通过对象签名可以在序列化过程中验证数据的有效性,避免因读取错误的数据导致程序出错。 在示例代码中,`CFoo`类增加了对象签名属性,并在序列化过程中先序列化该签名。修改后的`serialize()`函数如下: ```cpp ...

    JSON序列化Redis读取出错问题解决方案

    本文将深入探讨一种常见的错误,即“JSON序列化Redis读取出错”问题,并提供解决方案。 报错信息显示,错误类型为`NestedServletException`,其内部异常是`JSONException`,提示在解析时预期一个大括号`{`,但实际...

    iOS中自动实现对象序列化的方法详解

    在iOS开发中,对象序列化是一项重要的技术,它允许我们将对象的状态转换为可存储或传输的数据格式,如JSON或二进制数据。本篇文章将详细讲解如何在iOS中利用runtime自动实现对象序列化,遵循NSCoding协议的过程。 ...

    android-parcelable-intellij-plugin自动Parcelable方式序列化.rar

    Android开发中的Parcelable接口是用于对象序列化的一种高效方式,它比Java自带的Serializable接口性能更好,但编写起来较为繁琐。`android-parcelable-intellij-plugin`是一个IntelliJ IDEA的插件,它可以帮助开发者...

    jQuery实现form表单序列化转换为json对象功能示例

    jQuery提供了一个方便的方法来序列化表单数据,并将其转换为JSON对象,这在使用Ajax提交表单时特别有用。本文将通过一个示例来讲解如何使用jQuery实现这一功能。 首先,我们需要一个HTML表单,如下所示: ```html ...

    ysoserial:概念证明工具,用于生成利用不安全的Java对象反序列化的有效负载

    主驱动程序接受用户指定的命令,并将其包装在用户指定的小工具链中,然后将这些对象序列化为stdout。 当在类路径上具有必需小工具的应用程序不安全地反序列化此数据时,该链将自动被调用并导致命令在应用程序主机上...

    基于XML序列化技术的分布式数据库同步实现.pdf

    XML序列化技术具备将对象状态信息转换为可以存储或传输的格式(如XML文档)的能力,这使得它在数据表示和网络传输方面具有优势。在专线网络环境下,这种技术可以确保数据在不同数据库间传输的安全性。同时,XML具有...

    es11n:KV序列化库 (An easy serialization library for C++.)

    `es11n`是一个轻量级的序列化库,专为C++设计,其主要目标是简化对象到字节流和字节流到对象的转换过程。这个库通过在用户自定义的类中引入一个宏,使得序列化和反序列化变得简单易行。它特别强调对键值对(KV)存储...

    js序列化和反序列化的使用讲解

    合理使用序列化和反序列化可以使代码更加健壮,避免数据在不同阶段丢失或出错。尽管在某些情况下可以使用`eval()`来达到目的,但考虑到安全性和可维护性,推荐优先考虑使用`JSON.stringify()`和`JSON.parse()`这两个...

    Android-一个Android工具类用于将对象保存在一个Bundle中没有任何样板代码

    这个"Android-一个Android工具类用于将对象保存在一个Bundle中没有任何样板代码"的项目,提供了一种简洁的方式,使得开发者无需编写大量的样板代码就能实现对象的序列化和存储。这种工具类通常会封装序列化过程,...

    java 对象输入输出流读写文件的操作实例

    在 Java 中,实现对象序列化和反序列化需要实现 Serializable 接口。Serializable 接口是一个标记接口,实现该接口的类可以被序列化和反序列化。 在本实例中,我们定义了一个名为 Animal 的类,该类实现了 ...

    c# 复杂json内容 转对象工具

    本篇文章将深入探讨如何在面对复杂的JSON内容时,利用C#来实现对象的反序列化,并推荐一款实用的工具——JsonCSharpClassGenerator。 在C#中,反序列化是将JSON字符串转换为等效的C#类实例的过程。这使得我们可以...

    java深度克隆

    2. **序列化对象**:通过调用`ObjectOutputStream`的`writeObject()`方法将传入的对象序列化,并存储到`ByteArrayOutputStream`中。 3. **创建输入流**:使用`ByteArrayOutputStream`中的字节数组创建`...

    Android xml文件的序列化实现代码

    在Android开发中,XML文件的序列化是一种将对象的数据转换为XML格式的过程,方便存储或在网络上传输。Android提供了一个名为`XmlSerializer`的类,它使得XML序列化更加高效和安全,相比于直接拼接字符串的方式。以下...

Global site tag (gtag.js) - Google Analytics