要根据用户选择,向一个文件写一个类(Student)的实例,使用FileOutputStream、BufferedOutputStream与ObjectOutputStream流,FileOutputStream初始化为:
fileOutputStream = new FileOutputStream(fileStorage, true); // fileStorage是File的实例或是字符串形式。追加写(append=true)
使用objectOutputStream.writeObject(student)进行写入,写入前建立流,写入后关闭流(如果不关闭,会写不进去)。
student = (Student) objectInputStream.readObject()用来读出。读出前建立流,读出后关闭流(如果不关闭,会读不出来)。
由于每一次启动写操作时都会写入一个标记头,造成读入时只能读取第一个写入的记录。
ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.
所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.
一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.
被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,是则调用super.writeStreamHeader();
分享到:
相关推荐
在Java编程中,Socket和ObjectOutputStream是两个非常重要的概念,它们是进行网络通信的基础。Socket是TCP/IP协议的实现,提供了两台计算机之间双向、独立的数据传输通道。而ObjectOutputStream则是一个序列化流,...
python-javaobj 是一个 python 库,它提供了读取和写入(写入当前是 WIP)Java 对象的函数,序列化或将被ObjectOutputStream反序列化。 这种对象表示形式是 Java 世界中的标准数据交换格式。 javaobj 模块公开了...
Java序列化与ObjectOutputStream和ObjectInputStream的实例详解 Java序列化是指将Java对象转换为字节流的过程,以便将其存储或传输,而后可以将其恢复为原来的对象状态。Java提供了两种方式来实现序列化: ...
在Java I/O体系中,ObjectInputStream和ObjectOutputStream是两个关键类,它们提供了序列化和反序列化的功能,使得Java对象可以被写入到流中(例如磁盘或网络)并在之后重新读取。而FileInputStream则用于处理二进制...
ObjectOutputStream out = new ObjectOutputStream(fileOut); // 序列化对象 out.writeObject(user); out.close(); fileOut.close(); System.out.println("Serialized data is saved in user.ser"); // 输入流,...
`java-deserialize-recovery`项目专注于处理使用`java.io.ObjectOutputStream`创建的文件,这是一个Java核心库中的类,用于将Java对象转换为字节流,以便进行持久存储或网络传输。在Java中,序列化是对象状态持久化...
ObjectOutputStream output;//网络套接字输出流 ObjectInputStream input;//网络套接字输入流 ClientReceive recvThread; //建立菜单栏 JMenuBar jMenuBar = new JMenuBar(); //建立菜单组 JMenu ...
import java.io.ObjectOutputStream; public class TestObjectOutputStream { public static void main(String[] args) { try { //1.创建ObjectOutputStream类型的对象与c:/a.txt文件关联 ObjectOutputStream...
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("/Users/guanliyuan/user.txt")); objectOutputStream.writeObject(user); objectOutputStream.close(); } catch ...
Java的`ObjectOutputStream`是Java.io包中的一个关键类,用于序列化对象到输出流。序列化是指将Java对象转换为字节流的过程,以便可以存储或在网络上传输。这个过程使得数据能够在不同时间或不同环境之间保持一致性...
在Java编程语言中,ObjectInputStream和ObjectOutputStream是用于处理对象序列化和反序列化的类,它们是Java.io包的一部分。对象序列化是将Java对象转换为字节流的过程,而反序列化则是将字节流恢复为原来的Java对象...
ObjectOutputStream objectOutputStream = new ObjectOutputStream( out); objectOutputStream.writeObject(bean); objectOutputStream.flush(); } catch (Exception ew) { ew....
本文将深入探讨Java自带的序列化方法,主要包括`ObjectOutputStream`和`XMLEncoder`,以及它们对应的解码器和`readObject()`方法。 首先,让我们来看看`ObjectOutputStream`,这是Java提供的用于对象序列化的标准类...
通常情况下,将使用 ObjectOutputStream 类来创建序列化的字节流。该类提供了 writeObject 方法,该方法可以方便地处理整个对象图的序列化。 在上述问题中,需要对一个长整型(long)的原始值进行序列化,并且已经...
2. **创建ObjectOutputStream**:然后,你可以使用一个`FileOutputStream`或其他类型的输出流来创建一个`ObjectOutputStream`对象。这个对象能够处理Java对象的序列化。 3. **写入对象**:通过`ObjectOutputStream`...
`ObjectInputStream`和`ObjectOutputStream`用于序列化和反序列化对象;而`DataInputStream`和`DataOutputStream`则支持基本类型的数据读写。 在C#中,除了基础的`FileStream`,还有`MemoryStream`用于内存中的流...
ObjectOutputStream objout = new ObjectOutputStream(out); // 向服务器发送信息 objout.writeObject(user); socket.shutdownOutput(); System.out.println("正在向服务器端发送信息。。。"); ...
ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(obj); bytes = bo.toByteArray(); bo.close(); oo.close(); } catch (Exception e) { System.out.println("translation" + e....
这里存在一个错误,`ObjectOutputStream`的实例化语句应该改为`ObjectOutputStream os = new ObjectOutputStream(fs)`,因为`ObjectOutputStream`需要一个`OutputStream`类型的参数,而不是另一个`FileOutputStream`...