嗨,我是Java和学习的新手,我在这里搜索了这个问题的答案并用Google搜索,查看了Java Doc,但似乎无法找到关于这个主题的明确解释.
在包装流和Serializable对象时,将对象,数据,基元的混合写入文件,然后再次读回它们,必须以与写入时相同的顺序读回数据,对象,基元.如果类型或错误序列不匹配,则会出现EOFException.
在回读文件时,Java如何知道对象和数据的类型?我只能断定这是存储在文件中,还是FileDescriptor?但是在Java文档中没有任何相关内容?还是有吗?
编辑:我已经测试了这个(Java 8),如果我的序列错误,我会得到一个EOFException,并且我在读取文件时就得到了Exception.
编辑2:对不起,我没有发布代码,有点丢失它,因为我做了很多不同的流写入和读取,并在开始读取文件,纠正类型错误带走了异常的几种情况下得到了EOFException.代码如下,不得不从内存中重新创建.
try (DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)))) {
for (int i = 0; i < prices.length; i++) {
dataOut.writeDouble(prices[i]);
dataOut.write(numbers[i]);
dataOut.writeUTF(desc[i]);
}
try (DataInputStream dataIn = new DataInputStream(new BufferedInputStream(
new FileInputStream(dataFile)));) {
double price;
int number;
String description;
int c = 0;
while (true) {
price = dataIn.readDouble();
number = dataIn.readInt();
description = dataIn.readUTF();
System.out.println(price + " " + number + " " + description);
Run Code Online (Sandbox Code Playgroud)
我省略了一些代码,但核心元素在那里,所以readInt方法产生一个EOFException,(使用的是write方法,而不是writeInt).如果我更正错误(更改为writeInt)一切正常.但是,如果我在读取时在价格和数字之间交换位置没有错误并打印出垃圾,但仍然正常完成.
while (true) {
description = dataIn.readUTF(); …Run Code Online (Sandbox Code Playgroud)