小编AlQ*_*ode的帖子

从文件中读取对象和数据时,Java如何知道对象和数据的类型

嗨,我是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)

java input

1
推荐指数
1
解决办法
3121
查看次数

标签 统计

input ×1

java ×1