正在回答
4回答
同学你好,writerObject(null)只是针对本小节的练习的解决方案,对于同学的这种动态写入,并不适合这种文件的操作,同学可以在学习到数据库时,使用数据库操作,向数据库中动态的插入数据。祝:学习愉快~
乃好
2019-02-18 15:49:53
Test类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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个对象,读取输出一下,
1 2 | oos.writeObject( "d" ); oos.writeObject( "e" ); |
此时要求读取输出这个两个对象,可是这样使用while((temp=(String)ois.readObject()) != null)循环读取输出时,最后会报错
那么按照老师的说法最后加个null,像这样:
1 2 3 | oos.writeObject( "d" ); oos.writeObject( "e" ); oos.writeObject( null ); |
这样确实不会报错了,可是现在又要写入两个对象继续读取呢
1 2 | oos.writeObject( "f" ); oos.writeObject( "g" ); |
此时怎么读取呢?矛盾点在于,之前已经加入了null对象,无法使用循环判断是否为null输入了呀
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧