编辑(为了混淆):null
已被写入文件“abc”和“efg”。
运行以下代码后,文件“abc”的内容会发生变化null
,并且每次执行都会得到EOFException:
ObjIStream = new ObjectInputStream(new FileInputStream("abc"));
M[][] objs = (M[][]) ObjIStream.readObject();
FS.objs = objs;
ObjIStream.close();
此处,FS.objs
是类型M[][]
类型的FS类的静态成员。
另一方面,这个对文件没有影响,并且在执行任意数量后我没有得到任何异常:
ObjIStream = new ObjectInputStream(new FileInputStream("abc"));
M[][] objs = (M[][]) ObjIStream.readObject();
ObjIStream.close();
编辑:我刚刚发现了这种形式的FS类中存在的问题:
static{
try {
ObjOStream = new ObjectOutputStream(new FileOutputStream("abc"));
ObjOStream.close();
ObjOStream = new java.io.ObjectOutputStream(new java.io.FileOutputStream("efg"));
ObjOStream.close();
}
catch (IOException ex) { }
}
反正怎么样?
答案 0 :(得分:0)
问题是new FileOutputStream("abc")
本身,这意味着new FileOutputStream("abc", false)
。它会清除文件中的所有数据,因为您不会附加任何内容。它调用FileOutputStream.open(String name, boolean append)
这是一个private native
函数。它以覆盖模式擦除文件中的所有内容。