oos.writeObject(null);这是添加一个对象的默认值来结束查找嘛?

oos.writeObject(null);这是添加一个对象的默认值来结束查找嘛?

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 iwatch=new Product(256,"iwatch","watch",4799);
        try {
            FileOutputStream fos=new FileOutputStream("E:\\Project\\hello.txt");
            ObjectOutputStream oos=new ObjectOutputStream(fos);
            FileInputStream fis=new FileInputStream("E:\\Project\\hello.txt");
            ObjectInputStream ois=new ObjectInputStream(fis);
            oos.writeObject(iphone);
            oos.writeObject(ipad);
            oos.writeObject(macbook);
            oos.writeObject(iwatch);
            oos.writeObject(null);
            oos.flush();
            Product products;
            System.out.println("apple系列产品信息:");
            
                while((products=(Product)ois.readObject())!=null) {
                    System.out.println(products);
                }
                fos.close();
                oos.close();
                fis.close();
                ois.close();
        
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }

}

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

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

1回答
好帮手慕阿园 2020-09-12 10:29:05

同学你好,练习题完成的不错,棒棒哒

是的,oos.writeObject(null);是写入一个结束标志 null,用来表示到了文件末尾

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 问什么达到了序列化这里要加结束标志,必须要加上吗?
    2021-03-04 17:06:03
  • 同学你好,如果不加是会出现异常的,在代码中输出数据的条件是,当调用readObject()方法不为null,则代表存在数据,可以将数据输出。但读到最后没有数据可以输出时就会报EOFException异常,加一句oos.writeObject(null);表示到了文件末尾;如果为null,则结束循环。

    http://img1.sycdn.imooc.com//climg/6040aea309f8c3c904810137.jpg

    祝学习愉快~


    2021-03-04 17:57:19
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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