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

对象序列化出错

阅读更多


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}]; 一般的解析工具都会出错 详细信息请参观 ...

    java序列化和反序列化,面试必备

    最近阅读Serializable接口和Externalizable接口的源码,并结合了一些资料,对面试过程中与序列...如:RMI (远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错。所有必须保存到磁盘的java对象都必须是可

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

    本文实例讲述了jQuery实现form表单序列化转换为json对象功能。分享给大家供大家参考,具体如下: 做web前端开发时,需要ajax提交大量表单数据,如果一个个form字段拼接很费劲也容易出错,下面方法可解决这个问题 &...

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

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

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

    主要介绍了JSON序列化Redis读取出错问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java切水果源码注释-SerializationByConvention:不依赖预定义接口的Kotlin序列化的替代方法

    将对象序列化进/出某些存储需要使用反射、手动编写样板代码或使用代码生成。 我们想要在 JVM 之外安全、快速和可移植的序列化,所以反射是不可能的。 我们不想手动编写样板。 它很容易出错。 所以我们选择代码生成。...

    SharedPreferenc保存实体对象

    SharedPreferenc保存实体对象,方便快捷。不用像创建数据库那样繁琐,容易出错。通过Gson将对象序列化为字符串类型,然后保存到文件中,需要用的时候再反序列化得到对象。

    Android中的Bitmap序列化失败的解决方法

    之前写了个User类(实现了Serializable接口),类变量里有Bitmap类型的头像图片,Bitmap导致序列化不成功,报 “android.graphics.Bitmap”相关错误 解决方法之一:把Bitmap对象替换成byte数组来表示间接表示图片,在...

    易语言JSON模块:STJson2.3(开源+示例) - 纯算法

    修复了负数解析是出现的“解析数值出错”错误。 优化了多线程的支持。去除了所有“打开内存文件”改用 快速字节集对象。 2.2 加入二次寻址机制。 当存在 路径 和 句柄 参数时,如果 句柄 大于 0,而且路径也存在时...

    jijo:双向JSON序列化

    jijo:双向JSON序列化 设计目标 显式–解耦类型和编码器/解码器(与Aeson中自动派生的实例不同)。 双向性–使用相同的定义进行编码和解码,以防止在定义的一侧更新而另一侧没有更新时出错。 完整性–收集尽可能多...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    flink-spark-submiter:从本地IDEA提交FlinkSpark任务到Yarnk8s集群

    对开发者来说,本地IDEA调试Flink、Spark任务不涉及对象的序列化及反序列化,任务在本地调试通过后,执行在分布式环境下也可能会出错。 而将任务提交到集群进行调试还要走那些繁琐的流程太影响效率了。 因此,为方便...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    2.4.4 转义序列 52 2.5 C++中的计算 54 2.5.1 赋值语句 54 2.5.2 算术运算 55 2.5.3 计算余数 59 2.5.4 修改变量 60 2.5.5 增量和减量运算符 60 2.5.6 计算的顺序 63 2.6 类型转换和类型强制转换 64 2.6.1...

    pl/sql developer 9 + 注册机

    而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。 导出用户对象  该工具可以导出用户所选对象的DDL(数据定义语言)语句。您可以方便的为其他用户重新创建对象...

    PLSQL Developer 7.1.5

     非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就...

    PLSQL Developer 10.0.5.1710〖附中文补丁和注册机〗

     非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就...

    PL/SQL Developer

     非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就...

    PL/SQL Developer v8.0.zip

    非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就将...

    PLSQL Developer(免安装、汉化版,很好用的) 8.0.3.1510.rar

     非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就...

    PLSQL Developer 10.0.4.1708〖附中文补丁和注册机〗

     非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就...

Global site tag (gtag.js) - Google Analytics