java.io.StreamCorruptedException: invalid type code: AC问题解决
来源:互联网 发布:安卓手机plc编程软件 编辑:程序博客网 时间:2024/06/07 00:29
问题描述:
每次向一个文件中序列化对象时 ,每次只想向文件末尾追加对象,而不是覆盖,可以使用FileInputStream(文件名,true);在读取数据的时候第一次会正常读取,不会报错,当读取第二次的时候,就会报出java.io.StreamCorruptedException: invalid type code: AC的错误。
问题分析:
由于用FileInputStream(文件名,true)向同一个文件中序列化对象,每次都会向文件中序列化一个header。在反序列化的时候每个 ObjectInputStream 对象只会读取一个header,那么当遇到第二个的时候就会报错,导致出现异常。
解决方案:
一共三种方法,推荐使用第二种;
一、运用集合:
在第一次序列化对象之前,把要序列化的对象添加到集合中,把这个集合序列化到文件中。然后每次序列化之前,除了把准备序列化的对象添加到集合中,再把已经序列化的集合反序列化回来添加到集合中,然后再把集合序列化到文件中。
二、重写ObjectOutputSream的writeStreamHeader()方法:
判断是不是第一次写入,若是则写入头部,若不是则不写入头部
/**重写writeStreamHeader()方法*/class MyObjectOutputStream extends ObjectOutputStream{ public MyObjectOutputStream(OutputStream out) throws IOException { super(out); } public void writeStreamHeader() throws IOException{ return; }}public class SerializableDemo01{ //main方法 public static void main(String[] args) throws Exception { File file = new File(".\\b.txt"); Person p = new Person("lisi",19); set(file,p); List<Person> list = get(file); for(Person per:list){ System.out.println(per); } } //序列化 public static void set(File file,Person p) throws Exception{ FileOutputStream fos = new FileOutputStream(file,true); /** 判断是否是第一次写入 */ if(file.length()<1){ ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(p); oos.close(); }else{ MyObjectOutputStream mos = new MyObjectOutputStream(fos); mos.writeObject(p); mos.close(); } } //反序列化 public static List<Person> get(File file) throws Exception{ List<Person> list = new ArrayList<Person>(); FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); while(fis.available()>0){ Person p = (Person) ois.readObject(); list.add(p); } ois.close(); return list; }}
三:不重写ObjectOutputSream的writeStreamHeader()方法。在反序列化的while循环中,每次都创建一个新的ObjectInputStream用来读取header
public class SerializableDemo03{ public static void main(String[] args) throws Exception { File file = new File(".\\c.txt"); Person p = new Person("lisi",19); set(file,p); List<Person> list = get(file); for(Person per:list){ System.out.println(per); } } public static void set(File file,Person p) throws Exception{ FileOutputStream fos = new FileOutputStream(file,true); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(p); oos.close(); } public static List<Person> get(File file) throws Exception{ List<Person> list = new ArrayList<Person>(); FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = null; while(fis.available()>0){ //每次都new一个新的ObjectInputStream ois = new ObjectInputStream(fis); Person p = (Person) ois.readObject(); list.add(p); } ois.close(); return list; }}
阅读全文
0 0
- java.io.StreamCorruptedException: invalid type code: AC问题解决
- java.io.StreamCorruptedException: invalid type code: AC
- java.io.StreamCorruptedException: invalid type code: AC
- java.io.StreamCorruptedException: invalid type code: AC异常
- .java.io.StreamCorruptedException: invalid type code: AC解决办法
- .java.io.StreamCorruptedException: invalid type code: AC解决办法
- java.io.StreamCorruptedException: invalid type code: AC解决办法
- java.io.StreamCorruptedException: invalid type code: AC解决办法
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
- java.io.StreamCorruptedException: invalid type code: AC解决办法
- java.io.StreamCorruptedException: invalid type code: AC异常和对象流锁机制问题
- 多次创建object 写入对象文件中.java.io.StreamCorruptedException: invalid type code: AC解决办法
- 关于StreamCorruptedException: invalid type code: AC 异常
- tomcat8.0 启动报错 java.io.StreamCorruptedException: invalid type code: 3F
- 存储两次序列化对象,读取报错问题 java.io.StreamCorruptedException: invalid type code: A
- java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
- java.io.StreamCorruptedException: invalid stream header: ABACED00
- java.io.StreamCorruptedException: invalid stream header: 异常
- 线程死锁的原因和解决办法
- 用栈实现迷宫求解Maze
- MYSQL数据库性能优化
- struts文件的上传与下载
- 假设一个班级有5个人,每个人都会有一些共有的信息:姓名 学号 年龄 分数。从终端输入每个人的信息,然后按照分数从高到低排序,将信息打印到终端上。
- java.io.StreamCorruptedException: invalid type code: AC问题解决
- Hadoop2.7.3 mapreduce(二)类型匹配异常解决方案及源码分析
- 实用Jmeter录制复杂web测试脚本
- IdentityHashMap
- hdu 4717
- 基础宽搜 奶牛最少步数问题
- MFC消息映射机制概述(二)
- python递归实现汉诺塔实现
- java设计模式1(转自:http://blog.csdn.NET/zhangerqing)