java.io.StreamCorruptedException: invalid type code: AC解决办法

.java.io.StreamCorruptedException: invalid type code: AC解决办法

问题描述:

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

原因:

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

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

代码示例:

1.MyObjectOutputStream.java文件

import java.io.*;class MyObjectOutputStream extends ObjectOutputStream { 
public MyObjectOutputStream() throws IOException {  super(); 
}public MyObjectOutputStream(OutputStream out) throws IOException {super(out);} 
@Override protected void writeStreamHeader() throws IOException { return;}
}

2.ObjectSave.Java文件
import java.io.*;
import java.util.*;
public class ObjectSave { /**  * @param args *  * @throws IOException  *  * @throws IOException * @throws FileNotFoundException *  */ public static void main(String[] args) { ObjectOutputStream out = null; ObjectInputStream in = null;List<User> list = new ArrayList<User>();list.add(new User("admin", "admin", "123", 1)); list.add(new User("zhang", "zhang", "123", 0));String path = "d://abc"; try {      //判断文件大小并调用不同的方法 File file = new File(path); FileOutputStream fos = new FileOutputStream(file, true);     if(file.length()<1){           out = new ObjectOutputStream(fos);    }else{         out = new MyObjectOutputStream(fos);  }  //out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path,true))); //out.writeObject(Calendar.getInstance());  //判断文件大小并调用不同的方法  for (int i = 0; i < list.size(); i++) {   out.writeObject(list.get(i));  } } catch (Exception ex) { ex.printStackTrace(); } finally {   try {   out.close(); } catch (IOException e) { e.printStackTrace();  }  }  try { in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));//Calendar date = (Calendar) in.readObject();   //System.out.format("On %tA, %<tB %<te, %<tY:%n", date);  while (true) {  User user = (User) in.readObject(); System.out.println(user.getName());  }  } catch (EOFException e) { } catch (Exception ex) { ex.printStackTrace(); } finally {  try {   in.close();  } catch (IOException e) {  e.printStackTrace();   } } }} }}
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abb机器人指令手册_第1519课 ABB机器人初级教程

每一位读者都是我分享的动力&#xff0c;感谢大家关注&#xff01;第15课 系统输入输出与IO信号的关联第16课 示教器可编程按钮的使用第17课 什么是程序数据第18课 程序数据的类型与分类第19课 创建程序数据第15课第16课第17课第18课第19课每一位读者都是我分享的动力&#xff…

Java学习笔记之 IO包 字符流

字符流&#xff1a;Writer/Reader(字符流) 通过子类FileWriter和FileReader实现父类实例化 package iotest; import java.io.File; import java.io.Writer; import java.io.Reader; import java.io.FileWriter; import java.io.FileReader; public class OutputStreamDemo2 { p…

ci框架(二)

自定义SQL语句 当提供的API满足不了我们对SQL语句的要求的时候&#xff0c;我们通常是自己来写SQL语句&#xff0c;CI也提供了比较强大了&#xff0c;能够满足我们需求的一般的sql的API。 $res$…

到底该不该使用存储过程

百度百科对存储过程的定义存储过程&#xff08;Stored Procedure&#xff09;是在大型数据库系统中&#xff0c;一组为了完成特定功能的SQL 语句集&#xff0c;它存储在数据库中&#xff0c;一次编译后永久有效&#xff0c;用户通过指定存储过程的名字并给出参数&#xff08;如…

leetcode 104. Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 求二叉树的最大深度 /*** Definition for a binary tree node.* public class TreeNode {* int val…

ubuntu上面svn用merge合并到之前的版本

第一步&#xff1a;切换到svn项目的目录 第二步&#xff1a;更新到最新用 svn update 第三步&#xff1a;查看我们当前svn的版本号 svn infoRevision:2234 第四步&#xff1a;查看我们每次记录的日志信息得到版本号 svn log Revision:2231 第五步&#xff1a;合并到之前的版本…

智能卡门禁管理系统_汉中停车场智能门禁系统简介,保安服务收费,行业知识

首页 > 新闻列表 > 正文作者&#xff1a;佚名 点击数&#xff1a; 5更新时间&#xff1a;2020-11-04 08:21:21 导读&#xff1a;名将安防为您提供汉中停车场智能门禁系统简介,保安服务收费的相关知识与详情&#xff1a; 接警时&#xff0c;系统自动调出预警方案&#xf…

Quartus DSE 初步应用

介绍 Design Space Explorer (DSE) is a program that automates the process of finding the optimal collection of Quartus II software settings for a design.心得 &#xff1a; 好的timing是设计出来的。不建议工程一出现timing 就DSE搜索。只有timing只差一点点了才用 &…

推荐系统中协同过滤算法实现分析

原创博客&#xff0c;欢迎转载&#xff0c;转载请注明&#xff1a;http://my.oschina.net/BreathL/blog/62519 最近研究Mahout比较多&#xff0c;特别是里面协同过滤算法&#xff1b;于是把协同过滤算法的这个实现思路与数据流程&#xff0c;总结了一下&#xff0c;以便以后对系…

基于SQL的日志分析工具myselect

基本介绍 程序开发者常常要分析程序日志&#xff0c;包括自己打印的日志及使用的其他软件打印的日志&#xff0c;如php,nginx日志等&#xff0c;linux环境下分析日志有一些内置命令能够使用&#xff0c;如grep,sort,uniq,awk等&#xff0c;当中最强大的是awk&#xff0c;是作为…

老黄的2021

0x01 21年怎么说呢&#xff0c;平淡中带点惊喜。21年在现在的公司待满 2 年了&#xff0c;仔细想想&#xff0c;还真是&#xff0c;这是第一个待满 2 年的公司。这一年&#xff0c;有了很多的挑战&#xff0c;业务上的&#xff0c;技术上的&#xff0c;管理上的都是。下半年开始…

document.elementFromPoint

先说一下这个方法的参数 elemntFromPoint(x,y);//传入坐标值&#xff0c;返回当前页面上包含该坐标点的顶层元素 注意2点&#xff0c;坐标值和顶层元素 先说坐标&#xff0c;因为不同的人理解是不一样的&#xff0c;也就造就了这个方法在不同的浏览器中表现是不一样的&#xff…

Tree的前序序列化

Tree的序列化 比如有一颗树是这样的 1 2 3 如果它这个节点本身不是空则输入自己的值然后加上“!#” 如果是空则打印“#” …

iis6 开启options方法_《王者荣耀》暗夜危机什么时候开启 暗夜危机开启时间

导读 王者荣耀神秘关卡暗夜危机怎么进&#xff1f;许多玩家对于这个暗夜危机的关卡还不太熟悉&#xff0c;不知道如何开启&#xff0c;下面就让九游小编为大家带来&#xff0c;王者荣耀暗夜危机开启方法介绍。 王者荣耀神秘关卡暗夜危机怎么进&#xff1f; 峡谷异闻... 王者荣耀…

全球顶级大学,在中国录取率却不足0.5%,答案一针见血!

▲点击查看一提起新加坡教育&#xff0c;恐怕大家的第一反应都是&#xff1a;特别牛&#xff01;到底有多牛呢&#xff1f;我们拿数据说话——在全球公认的学生能力测试中&#xff0c;新加坡数学屡屡夺魁&#xff01;在“国际数学和科学评测趋势报告 2019”&#xff08;TIMSS&a…

div+css+js 树形菜单

2019独角兽企业重金招聘Python工程师标准>>> 代码&#xff1a; <div class"main_2"> <div class"m_left"> <ul class"nav"> <li id"bottom_none"><a href"#" onClick"DoMenu(C…

马化腾最崇拜的作家吴晓波《历代经济变革得失》读书笔记

吴晓波先生&#xff0c;是马化腾最崇拜的作家&#xff0c;腾讯的朋友说&#xff0c;马化腾逢人便推荐吴晓波的写的书《历代经济变革得失》&#xff0c;并亲自指示腾讯视频免费推广这个视频讲座。这本书我通读了两遍&#xff0c;总结了如下的笔记&#xff1a;

SQL:认识数据库约束

讲了关于数据库的很多内容&#xff0c;也讲了很多约束&#xff0c;对唯一和主键、核查和规则、外键约束很感兴趣。 一、唯一和主键&#xff08;实体完整性&#xff09;区别&#xff1a;数量&#xff1a;一张表只可以有一个主键约束&#xff0c;却可以有多个唯一约束。是否空值&…