我正在用ObjectOutputStream和ObjectInputStream编写一个func来将联系人信息导入和导出到文件中。
我有一个异常java.io.StreamCorruptedException:无效的流标题:部分ObjectInputStream中的EFBBBFAC,我不知道修复它。
如何修复它,谢谢。
LienHe lh = new LienHe(name, phone, img);
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("src/Bai6/lienhe.txt", true));
out.writeObject(lh);
out.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(FrmThemLienHe.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FrmThemLienHe.class.getName()).log(Level.SEVERE, null, ex);
}
lst = new ArrayList<>();
try {// exception
ObjectInputStream in = new ObjectInputStream(
new FileInputStream("src/Bai6/lienhe.txt")));
while (in.available() > 0) {
LienHe lh = (LienHe) in.readObject();
lst.add(lh);
}
} catch (ClassNotFoundException | IOException ex) {
System.out.println(ex.getMessage());
}
答案 0 :(得分:0)
如果不采取特殊措施,您无法附加到 <!DOCTYPE html>
<html>
<title>AI spawn test</title>
<canvas id="canvas" width="110" height="110"></canvas>
<script>
var ctx = canvas.getContext("2d");
var drawRect=function(rects){
for (var i=1; i<=rects; i++){
var rand3=Math.floor(Math.random() * 100) + 1;
var rand4=Math.floor(Math.random() * 100) + 1;
ctx.fillStyle='red';
ctx.fillRect(rand3, rand4, 10, 10)
}
}
drawRect(20);
</script>
。您应序列化集合,并在执行此操作时替换整个文件。
答案 1 :(得分:0)
你没有这么说,但是我假设你多次运行第一块代码(附加到同一个文件)然后再运行第二个代码...来读取你写的所有对象
实际上,您正在连接多个对象流,并尝试将其作为单个流进行读取。
那不行。问题是每个流都以特殊标头开头。当您尝试将串联作为单个流读取时,阅读器将看到意外的标头。这就是你所看到的异常的原因。
解决方案是重构代码,以便编写器将所有对象写入同一个ObjectOutputStream。