用ObjectOutputStream写到文件时,会调用writeStreamHeader的方法,在写入你要写入的内容之前会先写入一个header,这样才会在读出的时候解析出来。但是如果用了FileOutputStream追加的方法,就会导致每次追加的时候都会写入那个header,而读的时候只需要第一个header,所以就会把后面的header当做是你写的Object的一部分,这样就导致了无法解析而出现异常。针对这个问题,原作者进行了一些改进,写了自己的
import java.io.File;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
public class AppendableObjectOutputStream extends ObjectOutputStream {
private static File file;
private AppendableObjectOutputStream(OutputStream out,File file) throws IOException {
super(out);
}
public static AppendableObjectOutputStream getInstance(OutputStream out,File f) throws IOException{//这个方法主要是解决file的传入问题
file=f;
return new AppendableObjectOutputStream(out,f);
}
@Override
protected void writeStreamHeader() throws IOException {
if(!file.exists()||(file.exists()&&file.length()==0)){
super.writeStreamHeader();
}
}
}
我想可以单独写个write()与read()方法,当写的时候用List来存储要写入的数据,再循环写入。
分享到:
相关推荐
在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`...