关于读取和写入的问题!

关于读取和写入的问题!

1
import java.io.*;<br><br>class test{<br>        public static void main(String[] args) {<br>                Product pd1 = new Product(123,"iphone","telephone",4888f);<br>                Product pd2 = new Product(234,"ipad","computer",5088f);<br>                Product pd3 = new Product(345,"macbook","computer",10688f);<br>                Product pd4 = new Product(256,"iwatch","watch",4799f);<br>                try {<br>                        FileOutputStream fos = new  FileOutputStream("C:\\Users\\Administrator\\Desktop\\hello.txt");<br>                        ObjectOutputStream out = new ObjectOutputStream(fos);<br>                        out.writeObject(pd1);<br>                        out.writeObject(pd2);<br>                        out.writeObject(pd3);<br>                        out.writeObject(pd4);<br>                        out.flush();<br>                        out.close();<br>                        FileInputStream fls = new FileInputStream("C:\\Users\\Administrator\\Desktop\\hello.txt");<br>                        ObjectInputStream in = new ObjectInputStream(fls);<br>                        Product p1 = (Product) in.readObject();<br>                        Product p2 = (Product) in.readObject();<br>                        Product p3 = (Product) in.readObject();<br>                        Product p4 = (Product) in.readObject();<br>                        System.out.println(p1);<br>                        System.out.println(p2);<br>                        System.out.println(p3);<br>                        System.out.println(p4);<br><br><br><br>                } catch (FileNotFoundException e) {<br>                        e.printStackTrace();<br>                } catch (IOException e) {<br>                        e.printStackTrace();<br>                } catch (ClassNotFoundException e) {<br>                        e.printStackTrace();<br>                }<br><br><br>        }<br>}<br>

如上面代码,在写入的时候把多个对象写入了进去,读取的时候不应该是一下都读取出来吗?

为什么在后面创建一个读取的对象只能输出第一个写入的对象呢?而创建多个读写对象就会按照写入的对象顺序进行输出。

    ​    ​是写入多少个对象就应该匹配多少个读取的对象才能输出所写入的对象吗?

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

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

1回答
好帮手慕小小 2021-09-02 18:07:18

同学你好,是的,readObject方法每次只从ObjectInputStream中读取一个对象,

https://img1.sycdn.imooc.com//climg/6130a0c609c22f1d06970061.jpg

读取多个对象时可以使用循环进行多次读取,参考代码如下:

https://img1.sycdn.imooc.com//climg/6130a1e409b7493506430445.jpg

1
Product product = null;<br>while((product = (Product) in.readObject()) != null) {<br>   System.out.println(product);<br>}

祝学习愉快~

  • 提问者 残泪 #1

    它可以判断此对象是否是已经读过的是吧,而不是每次调用读取都是读取的第一个对象。读取操作会校验已读取的内容和要读取的内容是否一致,如果不一致就读取该内容,如果一致就会不进行操作而去读取不同的内容是吗?

    2021-09-03 08:10:25
  • 好帮手慕小脸 回复 提问者 残泪 #2

    同学你好,readObject()方法返回Object对象,我们是通过readObject()返回是否为空判断是否读完。在写完对象后,要加一句oos.writeObject(null);用来判断是否读取到结尾。然后循环读取时如果为null就读取到文件结尾了。

    https://img1.sycdn.imooc.com//climg/61319d96094f1db705500102.jpg

    祝学习愉快~

    2021-09-03 11:59:22
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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