序列化可以正常存入多个对象,反序列化只能读入一个对象,求助求助

public class StuOpration {
static File file = new File("student.txt");
public void writeStreamheader(){}
//添加一个学生
public static void get() throws FileNotFoundException{
FileOutputStream os = new FileOutputStream(file,true);
}
public static void add(Student stu) throws Exception{
if(file.length() ==0){
get();
}
FileOutputStream os = new FileOutputStream(file,true);
ObjectOutputStream oos = new ObjectOutputStream(os );
oos.writeObject(stu);
oos.writeChars("\n");
oos.close();
System.out.println("添加成功");
}
//修改学生信心
public void update(int num,int age) throws Exception{
FileInputStream is = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream( is);
Student stu = (Student)ois.readObject();
while(is.available()>0){
if(stu.getNum() == num){
stu.setAge(age);
System.out.println("修改成功");
return;
}
stu = (Student)ois.readObject();
}
ois.close();
}
//删除一个学生
public void delete(int num) throws Exception{
FileInputStream is = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream( is);
Student stu = (Student)ois.readObject();
while(is.available()>0){
System.out.println(stu);
stu = (Student)ois.readObject();
}
ois.close();
}

public void show() throws Exception{
     FileInputStream is = new FileInputStream(file);
    ObjectInputStream ois = new ObjectInputStream( is);
    Student  obj=(Student)ois.readObject();
    while(true){
        try {
            System.out.println(obj);
            obj=(Student)ois.readObject();

        } catch (Exception e) {
            System.out.println("数据已经读取完毕");
            break;
        }
    }
    ois.close();
}

}

请输入对应的编号:
1: 添加学生 2: 修改学生信息 3:删除学生4:显示学生信息
4
Student [name=张三, password=123, score=45.0, num=1, age=23]
数据已经读取完毕





5个回答

你的实现序列化接口呢,不是说数据流就是序列化啊

x060508
x060508 因为有标识符的存在 我建议你直接保存一个list对象 增加的时候 先读取list然后add 然后在store到文件里 查找的时候也是优先读取list 然后遍历查找 删除也是读取list 遍历到符合要求删除的条件 . 最后在重新把list写入到文件中
12 个月之前 回复
lixiaozhen007
lixiaozhen007 就是问问你的学生类有没有实现序列化接口。
12 个月之前 回复

看错了,你的代码实际就是把数据读写到txt文档中,你的数据已经改变了,是一个json,读取出来的是string对象,需要自己转化,对象不会自己映射的,这个和序列化,没关系,只要实现接口,这个是自动的

lixiaozhen007
lixiaozhen007 嗯,这个是一个原因,不是主要得,你把数据转json给写到文档里了,实际你读出来得时候,就是一个json数据,你把这个数据再转化为实体就行了
12 个月之前 回复
zhjhcjl9294
zhjhcjl9294 是将Student类实现Serializable接口吗?
12 个月之前 回复

Json数据比list数据在存储的时候,更有优势,首先数据是一个json,其次可以转化为一个json数组,读取的时候,全部读取就可以了。不要按行或者其他的
直接读取,变成String字符串,之后转为json,就可以了,没那么复杂把。也就是数据在读出来的时候,转化的相关问题,String接受,没毛病只要是数据
,其次是转化为json,其次转json数组,之后是赋值给一个实体(自己建的类),这个不是数据库啥的,不会自己提供映射。

lixiaozhen007
lixiaozhen007 把json中的任何一个数据,任何一个部分的数据都可以劈出来,赋值
12 个月之前 回复

我今天晚上也遇到了这个问题,现在已经解决了,
问题原因:因为你每次序列化往文件里存对象,是不同的对象,就相当于每次的密码都不一样,虽然都已经存到文件里了,但是反序列化 往外取的时候,只能取一种,自然就是第一次存的了。
解决办法: 定义一个集合,每次先把文件里原来的对象取出来,存到集合里,再新添对象也存到集合里,然后把这个集合反序列化到文件里 覆盖掉原先的。

因为有标识符的存在 我建议你直接保存一个list对象 增加的时候 先读取list然后add 然后在store到文件里 查找的时候也是优先读取list 然后遍历查找 删除也是读取list 遍历到符合要求删除的条件 . 最后在重新把list写入到文件中

ybula
ybula 回复zhjhcjl9294: 也就是说读取就只能读取一个,如果要实现多个只能将对象放进容器再一次全部读取出来吗
大约 2 个月之前 回复
zhjhcjl9294
zhjhcjl9294 谢谢谢谢
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
序列化追加了多个对象到文件,为什么只能反序列化一个对象??
序列化多个对象rnFileOutputStream out=new FileOutputStream(f,true);rnrn为什么反序列化只输出一个对象?rnPERSON=(Map) in.readObject();
[求助]请教一个对象序列化和反序列化的问题!!!!
public static byte[] doSerialize(object obj)rnrn System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formater=new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();rn System.IO.MemoryStream ms=new System.IO.MemoryStream();rn formater.Serialize(ms,obj);rn byte[] info=ms.ToArray();rn ms.Close();rn return info;rnrnrnrnprivate System.Collections.ArrayList doDeserialize(byte[] bt)rnrn System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formater=new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();rn System.IO.MemoryStream ms=new System.IO.MemoryStream(bt);rn ms.Position=0;rn System.Collections.ArrayList NameList=(System.Collections.ArrayList)formater.Deserialize(ms);rn ms.Close();rn return NameList;rnrnrn我用以上两个方法对ArrayList进行序列化和反序列号(在服务端序列化,通过网络传到客户端反序列化),但总是出现以下异常,请问要怎样解决?非常感谢!!!!rnrn未处理的“System.Runtime.Serialization.SerializationException”类型的异常出现在 mscorlib.dll 中。rnrn其他信息: BinaryFormatter 版本不兼容。应为版本 1.0。接收到的版本为 16777216.50331648。
[求助]关于反序列化多个对象
序列化一个对象存到txt文件,然后反序列化这个没有问题。rn可是在我重新运行程序时,再创建一个对象,然后序列化这个新对象并存到同一个txt文件中,这时候再反序列化时只能读取我第一个存入txt中的对象,后来重新运行程序时存进去的对象读不出来rnrn我在网上也搜索过反序列化多个对象的方法,说是存到将多个对象存到一个Object[]中,可是这样实际还是读的时候读那一个数组rn但是对于重新运行程序时再往里存对象如何读出来没有效果rnrnrn有什么解决办法吗?rnrnrn不知道我问题表达的是否清楚。。。
求助关于序列化和反序列化
为什么用一个进程序列化后的数据文件前面会有这个进程的名称版本等信息rn而用另外一个进程对该文件凡序列化时却发生异常,难道一定要用同一个进程去反序列化吗?rnrn经检查的确如此!!rn这样好像不太好吧rnrn请问是我弄错了,还是有别的解决方法rnrn新手上路,问题比较多,希望各位耐心赐教rn
序列化与反序列化一个对象
对象序列化:把一个对象变为 二进制数据流 的一种方法。 一个类要想被序列化,就行必须实现java.io.Serializable接口。实现了这个接口之后,就表示这个类具有被序列化的能力。先让我们实现一个具有序列化能力的类吧: class Person implements Serializable { public Person() { } public Person(String...
对象的序列化与反序列化入门
对象的序列化:把java对象转换为字节序列的过程。 对象的反序列化:把字节序列恢复为java对象的过程。   对象的序列化主要有两种用途:   (1)把对象的字节序列永久保存到硬盘上,通常存放在一个文件中;     (2)在网络上传送对象的字节序列。   JDK类库中的序列化API     (1)java.io.ObjectOutputStream 代表对象输出流,它...
实现对象的序列化和反序列化
一、什么是对象的序列化和反序列化 序列化:把对象转换成字节序列的过程称为序列化 反序列化:把字节序列恢复成对象的过程称为反序列化   二、为什么要实现对象的序列化 1.把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中 2.在网络上传输数据,将对象以字节序列地方式进行传送 当需要存储大量对象(数十万个对象时,内存可能无法存储),这时就需要把对象进行序列化存储到硬盘中,等需要用的...
对象和Xml序列化反序列化
c#语言,对象和Xml序列化反序列化示例。源码。
对象的序列化和反序列化
对象的序列化和反序列化
JAVA对象的序列化与反序列化
环境:rn项目一,项目二......项目nrn有J2EE,有ASP.NET也有PHP或者也有其它语言开发的。也不是一定要在本地。rn我要在一个门户页面登录,然后点击其中各个项目实现SESSION共享,或者说是SSO。rn我已经实现了,我想知道大家对这样的需求的东西有什么更为独到的解决办法。
对象的序列化与反序列化
什么是对象的序列化?    对象的序列化是将对象状态转换为可保持或传输的格式的过程。一般的格式是与平台无关的二进制流(字节序列),可以将这种二进制流持久保存在磁盘上,也可以通过网络将这种二进制流传输到另一个网络节点。与对象序列化对应的是反序列化,是指由输入流将这种二进制流读入,重新恢复成原来的对象。对象序列化的作用远程方法调用机制,通过各个Socket作为对象之间的通信,从而实现程序组件在不同操作...
序列化与反序列化对象
应用程序常常需要在硬盘上存储数据。之前介绍了逐段构建文本和数据文件,但这常常不是最简便的方式。有时最好以对象形式存储数据。 .NET Framework 在System.Runtime.Serialization 和System.Runtime.Serialization.Formatters名称空间中提供了序列化对象的基础架构,这两个名称空间中的一些类实现了这个基础架构。Framework中有
java 对象的序列化与反序列化
java 对象的序列化与反序列化 java 对象的序列化与反序列化
java对象的序列化和反序列化
        今天在看hashMap的源码的时候发现了transient关键字。之前都不知道这个关键字。现在既然了解到了,就做下记录。解决transient关键字的作用之前,我们需要了解java的序列化和反序列化。因为transient涉及到了这两点。序列化:我们通俗点理解就是jvm能够我们创建的对象保存为字符数组。     通常在java中,我们可以通过使用new关键字、使用Class类的ne...
Java对象的序列化和反序列化
Java对象的序列化和反序列化当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。只能将支持 java.io.Serializable 接口的对象写入流中。
Java对象的序列化与反序列化
序列化与反序列化序列化就是将对象的状态信息转换为可以存的字节序列存等储,在以后将这个字节序列恢复成对象就是反序列化。 实现Serializable的方式public class Fruit implements Serializable { /** * */ private static final long serialVersionUID = 1L; p
序列化和反序列化读写对象
对象的序列化 将对象持久化保存到本地 ObjectOutputStream 序列化的过程 也就是将保存到本地 也就是写入文件夹的过程 保存数据到文件中 操作文件 : File outputStream Writer ObjectInputStream 反序列化的过程 读取对象文件夹的过程 public stati...
网络传输对象的序列化,反序列化
在做网络传输消息的程序。为了适应不同的平台,我想将对象序列化,后再传输,另一端进行反序列化。rn但是这样问题就来了,反序列化的时候,不知道反序列化的类型,而且关于多态对象,更是棘手。而且rn如何确保一个对象完成的传输过来。rn大家有没有成熟的做法?
对象的序列化与反序列化的文件读写
有个对象如下rnclass studentrnprivate:rn string name;rn string address;rn......rnrnrnrn该对象怎么进行文件的读写,写入文本文件。用vc++编译器。由于string是个指针,网上找的相关资料都看不大明白,最后能给个小例子。
对象怎么序列化和反序列化?
格式分别是什么?最好有源代码
对象的序列化及反序列化
    可参考:   Java基础学习总结——Java对象的序列化和反序列化   http://kb.cnblogs.com/page/515982/
序列化和反序列化
一、序列化和反序列化的概念  把对象转换为字节序列的过程称为对象的序列化。   把字节序列恢复为对象的过程称为对象的反序列化。   对象的序列化主要有两种用途:   1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;   2) 在网络上传送对象的字节序列。  在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的S
_058_ObjectOutputStream对象的序列化和反序列化
========================   ObjectOutputStream需要注意的: 1 写入的类必须实现Serializable(序列化),这个Serializable只是一个标识 2 对象的反序列号创建对象的时候并不会调用构造方法 3 serialVersionUID用于记录class文件的版本信息,serialVersionUID这个数字通过一个类名,包名,成员名,...
java对象的序列化和反序列化
java对象的序列化和反序列化序列化:       就是将一个对象转换为二进制的数据流。这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口。在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。 反序列化:将二进制数据流转换成相应的对象。       如果想要完成对象的序列化,则还...
对象的序列化和反序列化:
对象的序列化和反序列化: ObjectInoutStream/ObjectOutputStream extends InputStream/Outputstream 1. 对象的序列化,即将Object转换为byte序列的过程; 对象的反序列化,将byte序列转化为Object的过程。 2. 序列化流(ObjectOutputStream),过滤流–>writeObject 反序列化
Java之对象的序列化与反序列化
对象的序列化和反序列化1)对象的序列化,就是把object转换为byte序列,反之叫对象的反序列化2)序列化流(ObjectOutputStream),是过滤流------writeObject     反序列化流(ObjectInputSteam)-----------readObject3)序列化接口(Serializable)     对象必须实现序列化接口,才能进行序列化,否则将出现异常 
java 对象的序列化和反序列化
目录 简介 序列化步骤 serialVersionUID 简介把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。java中对象的序列化机制是允许对象转为字节序列。这些字节序列可以使Java对象脱离程序存在,对象的序列化主要有两种用途: 把对象保存到硬盘上。 例如:Web服务器中的Session对象,当有超高数量用户并发访问,就有可能出现超高数量个Ses
java对象的序列化与反序列化
java对象若要序列化,全局必须要实现一个接口:Serializable
JAVA 序列化反序列化对象
1 需要序列化的类要实现Serializable接口 代码示例: Computer 类: package com.zjq.serializer; import java.io.Serializable; public class Computer implements Serializable { /** * */ private static final long se
对象-序列化-反序列化相关资料
对象-序列化-反序列化相关资料
0004-java对象的序列化和反序列化
序列化对象,保存到数组或者文件中
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制