关于插入一个null对象

关于插入一个null对象

很多同学都能正常输出但是报错,老师的解决方案是写入的时候最后插入一个null,那么如果有这样一种情况:

写入两个对象,读一下,再写入两个对象,再读一下,这样的情况下就不能插入null了呀,那要怎么办

正在回答

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

4回答

同学你好,writerObject(null)只是针对本小节的练习的解决方案,对于同学的这种动态写入,并不适合这种文件的操作,同学可以在学习到数据库时,使用数据库操作,向数据库中动态的插入数据。祝:学习愉快~

好帮手慕阿满 2019-02-18 19:05:35

同学在纠结什么?writerObject(null);写在输入所有对象的后边,表示读到了文件的末尾。如果写入两个对象,读取一下,写入这两个对象后,加上writerObject(null);再写入两个对象,就将写入这两个对象的语句加在writerObject(null)的前面,这样就可以读取四个对象了,只需要保证writerObject(null)在写入所有对象的后边即可。祝:学习愉快~

  • 提问者 乃好 #1
    老师你好,你说的这种方法是直接修改源代码吧?我的意思是在程序运行的过程中,动态产生一些对象写入文件,进行第一次读取,再产生一些对象写入文件,再进行第二次读取,这样的情况下将writerObject(null)放在哪里呢? 我模拟一下程序运行时,文件内的结构:下面是第一次写入对象: 【对象1】 【对象2】 【null】 此时进行读取。。。读取成功 此时确实可以正常读取输出,但这样一来我后面第二次写入对象后文件结构为: 【对象1】 【对象2】 【null】 此时进行读取。。。读取成功 【对象3】 【对象4】 【null】 此时进行读取。。。这里由于【对象2】后面已经有了一个null,所以在第二次进行读取时只能读取到对象1和对象2,我后面添加的对象3和对象4怎么一起读取出来呢?
    2019-02-18 23:48:11
提问者 乃好 2019-02-18 15:49:53


Test类:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Test
{
    
    public static void main(String[] args) throws IOException, ClassNotFoundException
    {
       
        FileOutputStream fos = new FileOutputStream("a.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        FileInputStream fis = new FileInputStream("a.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        
        Car c1 = new Car(3);
        Car c2 = new Car(4);
        Car c3 = new Car(5);
        
        oos.writeObject("a");
        oos.writeObject("b");
        oos.writeObject("c");
        //oos.writeObject(null);
        oos.flush();
        
        String temp;
        while((temp=(String)ois.readObject()) != null)
        {
            System.out.println(temp);
        }
    }

你可以测试一下这段代码,发现写入的内容都读入且输出了,但是最后会报错,老师的建议是在写入多个对象后再写入一个null,这样下面使用 while((temp=(String)ois.readObject()) != null)来判断时就不会报错

问题是如果有这样一种情况:写入了2个对象,读取输出一下,

oos.writeObject("d");
oos.writeObject("e");

此时要求读取输出这个两个对象,可是这样使用while((temp=(String)ois.readObject()) != null)循环读取输出时,最后会报错

那么按照老师的说法最后加个null,像这样:

oos.writeObject("d");
oos.writeObject("e");
oos.writeObject(null);

这样确实不会报错了,可是现在又要写入两个对象继续读取呢

oos.writeObject("f");
oos.writeObject("g");

此时怎么读取呢?矛盾点在于,之前已经加入了null对象,无法使用循环判断是否为null输入了呀

  • 同学你好,如果后面还要写入对象,前面就不能加WriteObject(null)。这就代码应该加在写入所有对象的后面,表示读到末尾。祝:学习愉快~
    2019-02-18 17:23:55
  • 提问者 乃好 回复 好帮手慕阿满 #2
    可是最后加入null的话,中途要读怎么办呢?会报错的呀
    2019-02-18 18:54:24
慕布斯645313 2019-02-18 14:28:51

你把代码粘贴一下

  • 提问者 乃好 #1
    老哥麻烦看一下
    2019-02-18 15:50:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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