5-3作业

5-3作业

package com.imooc.serial;


import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;


public class ProductTest {


public static void main(String[] args) {

// 创建对象

Product iphone = new Product(123, "iphone", "telephone", 4888);

Product ipad = new Product(234, "ipad", "computer", 5088);

Product macbook = new Product(345, "macbook", "computer", 10688);

Product iwach = new Product(256, "iwatch", "watch", 4799);

FileOutputStream fos ;

ObjectOutputStream oos;

FileInputStream fis;

ObjectInputStream ois;

// 进入输出操作

try {

fos = new FileOutputStream("test.txt");

oos = new ObjectOutputStream(fos);

// 输入流操作

fis = new FileInputStream("test.txt");

ois = new ObjectInputStream(fis);

// 将对象写入文件

oos.writeObject(iphone);

oos.writeObject(ipad);

oos.writeObject(macbook);

oos.writeObject(iwach);

oos.flush();

// 进行读取文件

System.out.println("apple系列产品信息:");

Product test = null;

try {

while ((test = (Product) ois.readObject()) != null) {

System.out.println(test+"\n");

}


} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

ois.close();

oos.close();

fis.close();

fos.close();

}


} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();


}

}

}

最后正常输出,但是有异常

apple系列产品信息:


产品ID:123

产品名称:iphone

产品属性:telephone

产品价格:4888.0元


产品ID:234

产品名称:ipad

产品属性:computer

产品价格:5088.0元


产品ID:345

产品名称:macbook

产品属性:computer

产品价格:10688.0元


产品ID:256

产品名称:iwatch

产品属性:watch

产品价格:4799.0元

java.io.EOFException

at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:3014)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1575)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)

at com.imooc.serial.ProductTest.main(ProductTest.java:39)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-01-28 17:07:47

同学你好,java.io.EOFException异常是因为当读取过程中意外到达文件或流的末尾时,会抛出此IO异常。建议同学将Product对象写入文件后,加一句oos.writeObject(null);表示到了文件末尾。如下图所示:

http://img1.sycdn.imooc.com//climg/60127ecb0977d5c404650267.jpg

祝学习愉快!

  • 提问者 rock221 #1

    在这个方法中,为什么是null呢?oos.writeObject(null);为什么就表示到结尾了呢 

    2021-01-28 23:23:56
  • 提问者 rock221 #2

    writeObject(Object obj)  这个方法如果返回值是null,说明到结尾了吗?但是我看它的返回值是void啊

    2021-01-28 23:26:08
  • 好帮手慕小尤 回复 提问者 rock221 #3

    同学你好,1、readObject()方法是将writeObject()方法写入的数据来读取出来。

    2、在代码中输出数据的条件是,当调用readObject()方法不为null,则代表存在数据,可以将数据输出。如果为null,则结束循环。

    http://img1.sycdn.imooc.com//climg/60136dac0934ebcf05670171.jpg

        所以当读取到达文件或流的末尾时,并未出现为null的数据,从而导致出现异常。所以需要通过writeObject()方法添加为null的数据。

    祝学习愉快!

    2021-01-29 10:10:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师