.java.io.StreamCorruptedException: invalid type code: AC解决办法
来源:互联网 发布:多表查询sql语句 编辑:程序博客网 时间:2024/05/27 14:13
问题描述:
在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了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(); } } } } } } }
- .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解决办法
- 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: 异常
- jquery的each()详细介绍
- Oracle SQL语句之UPDATE
- 什么因素决定浏览器前进后退时的页面一定会被刷新?
- word 自动项目编号,自动关联上一级编号
- 怎样取消IE8中的启用内存保护攻击
- .java.io.StreamCorruptedException: invalid type code: AC解决办法
- Java类装载的过程及原理介绍
- 绿化软件之常用工具
- ios UItableview的使用
- acl_cpp中流式编程的设计
- 微博上看到的一个查询相同字符的方法
- 网络安全
- Qt学习:项视图类之自定义委托
- 养成良好的Sql习惯