追加到 ObjectOutputStream:解决方案
在 Java 中,本质上不支持追加到 ObjectOutputStream。尝试使用标准 ObjectOutputStream 附加到现有文件将导致读取时出现 StreamCorruptedException。
要克服这一限制,可以子类化 ObjectOutputStream 并重写其 writeStreamHeader 方法。修改后的 writeStreamHeader 不应写入标头,而是在写入初始对象时重置流。
以下代码演示了 AppendingObjectOutputStream 类的创建:
public class AppendingObjectOutputStream extends ObjectOutputStream { public AppendingObjectOutputStream(OutputStream out) throws IOException { super(out); } @Override protected void writeStreamHeader() throws IOException { // do not write a header, but reset: this.reset(); } }
要使用该类,判断目标历史文件是否存在。如果是,则实例化 AppendingObjectOutputStream 以追加数据而不写入标头。如果文件不存在,则实例化标准ObjectOutputStream来写入头。
// Check if history file exists if (fileExists) { // Appendable stream ObjectOutputStream out = new AppendingObjectOutputStream(new FileOutputStream(filePath, true)); } else { // Standard stream ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath)); }
通过使用AppendingObjectOutputStream,可以成功地将对象追加到现有的历史文件中,确保所有写入的对象都可以读取以正确的顺序。
以上是如何在 Java 中将对象追加到现有的 ObjectOutputStream?的详细内容。更多信息请关注PHP中文网其他相关文章!