先声明输入流再声明输出流出现java.io.EOFException,但是先声明输出流再声明输入流却不会报错

先声明输入流再声明输出流出现java.io.EOFException,但是先声明输出流再声明输入流却不会报错

# 具体遇到的问题

# 报错信息的截图

java.io.EOFException

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2353)

at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2822)

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)

at java.io.ObjectInputStream.<init>(ObjectInputStream.java:301)


# 相关课程内容截图

# 尝试过的解决思路和结果

            FileOutputStream fos = new FileOutputStream("D:\\Product.txt");
       ObjectOutputStream oos = new ObjectOutputStream(fos);
       FileInputStream fis = new FileInputStream("D:\\Product.txt");
       ObjectInputStream ois = new ObjectInputStream(fis);

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

public class Product implements Serializable {
private String id;
   private String name;
   private String categories;
   private double price;

   public Product(String id, String name, String categories, double price) {
this.id = id;
       this.name = name;
       this.categories = categories;
       this.price = price;
   }

@Override
   public String toString() {
return "产品ID:" + id +
"\n产品属性:" + name +
"\n产品属性:" + categories +
"\n产品价格:" + price;
   }
public static void main(String[] args) {
try {
Product iphone = new Product("123", "iphone", "telephone", 4888.0);
       Product ipad = new Product("234", "ipad", "computer", 5088.0);
       Product macbook = new Product("345", "macbook", "computer", 10688.0);
       Product iwatch = new Product("256", "iwatch", "watch", 4799.0);

       FileInputStream fis = new FileInputStream("D:\\Product.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
FileOutputStream fos = new FileOutputStream("D:\\Product.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);

       oos.writeObject(iphone);
       oos.writeObject(ipad);
       oos.writeObject(macbook);
       oos.writeObject(iwatch);
       oos.writeObject(null);
       oos.flush();

       Product product;
       while ((product = (Product) ois.readObject()) != null)
System.out.println(product.toString());

       oos.close();
       fos.close();
       ois.close();
       fis.close();
   } catch (FileNotFoundException e) {
System.out.println("File Not Found...");
   } catch (IOException e) {
e.printStackTrace();
   } catch (ClassNotFoundException e) {
e.printStackTrace();
   }

}


正在回答

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

1回答

同学你好,老师并没有复现同学的问题,无论是先声明输入流还是先声明流,都可以正确执行,例如:

先声明输出流

http://img1.sycdn.imooc.com//climg/5fdef89409526eb107490669.jpg

先声明输入流

http://img1.sycdn.imooc.com//climg/5fdef8cf092c7e5207960615.jpg

如上所示,都可以正确执行,可能是同学工具的问题,同学尝试重新启动一下自己的eclipse,再来试试。

如果同学使用的不是eclipse,建议同学换成eclipse再来试试。

  • xxiangyeyu 提问者 #1

    先声明输入流,Product.txt清空再试下

    如果还没有问题那就是idea的问题了,之前也有idea自身的问题 

    2020-12-20 17:32:51
  • 好帮手慕小班 回复 提问者 xxiangyeyu #2

    同学你好,可能是idea工具本身的问题,这里能正确使用就可以,无需深究这个问题。

    祝:学习愉快

    2020-12-20 17:48:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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