博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.java.io.StreamCorruptedException: invalid type code: AC解决办法
阅读量:7282 次
发布时间:2019-06-30

本文共 2675 字,大约阅读时间需要 8 分钟。

问题描述:

在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建了ObjectOutputStream流对象,在向外读数据的时候第一次运行的时候不会报错,在第二次就会报java.io.StreamCorruptedException: invalid type code: AC错误。

原因:

在一个文件都有一个文件的头部和文件体。由于对多次使用FileOutputStream(文件名,true)构建的ObjectOutputStream对象向同一个文件写数据,在每次些数据的时候他都会向这个文件末尾先写入header在写入你要写的对象数据,在读取的时候遇到这个在文件体中的header就会报错。导致读出时,出现streamcorrput异常。

解决办法:所以这里要判断是不是第一次写文件,若是则写入头部,否则不写入。

代码示例:

1.MyObjectOutputStream.java文件

1 import java.io.*;class MyObjectOutputStream extends ObjectOutputStream {  2 public MyObjectOutputStream() throws IOException {   3        super();  4 } 5  public MyObjectOutputStream(OutputStream out) throws IOException { 6   super(out); 7  }  8 @Override       protected void writeStreamHeader() throws IOException {  9    return;10  }11 }
2.ObjectSave.Java文件
1 import java.io.*; 2 import java.util.*; 3 public class ObjectSave {  4     /**  * @param args  5      *  * @throws IOException   6      *  * @throws IOException  7      * @throws FileNotFoundException  8      *  */  9     public static void main(String[] args) { 10         ObjectOutputStream out = null; 11         ObjectInputStream in = null;12         List
list = new ArrayList
();13 list.add(new User("admin", "admin", "123", 1)); 14 list.add(new User("zhang", "zhang", "123", 0));15 String path = "d://abc"; 16 try { //判断文件大小并调用不同的方法 17 File file = new File(path); 18 FileOutputStream fos = new FileOutputStream(file, true); 19 if(file.length()<1){ 20 out = new ObjectOutputStream(fos); 21 }else{ 22 out = new MyObjectOutputStream(fos); 23 } 24 //out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path,true))); 25 //out.writeObject(Calendar.getInstance()); 26 //判断文件大小并调用不同的方法 27 for (int i = 0; i < list.size(); i++) { 28 out.writeObject(list.get(i)); 29 } 30 } catch (Exception ex) { 31 ex.printStackTrace(); 32 } finally { 33 try { 34 out.close(); 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 } try { 39 in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));40 //Calendar date = (Calendar) in.readObject(); 41 //System.out.format("On %tA, %

转载地址:http://ljkjm.baihongyu.com/

你可能感兴趣的文章
python版亲戚关系计算器
查看>>
送给程序员们的经典电子书大礼包
查看>>
SQL注入关联分析
查看>>
应用Promise封装Ajax实践
查看>>
渗透&&探测 ( ICMP 篇)
查看>>
容器监控实践—Prometheus的配置与服务发现
查看>>
dubbo源码解析(三十九)集群——merger
查看>>
PAT A1022
查看>>
捋一捋React的生命周期
查看>>
【跃迁之路】【731天】程序员高效学习方法论探索系列(实验阶段488-2019.2.21)...
查看>>
HTTP中Accept与Content-Type区别
查看>>
RunC容器逃逸漏洞席卷业界,网易云如何做到实力修复?
查看>>
PAT A1043
查看>>
SAP S/4HANA生产订单的BAdI增强点之Initialize方法
查看>>
css加载会造成阻塞吗
查看>>
天天都在使用CSS,那么CSS的原理是什么呢?
查看>>
可视化开发脚手架
查看>>
springboot jar 启动脚本
查看>>
现代JS中的流程控制:详解Callbacks 、Promises 、Async/Await
查看>>
如何在微软Azure上设置以太坊私有区块链
查看>>