Java里的IO流里的 ObjectInputStream 的读取\写入!

本文介绍了Java中使用ObjectInputStream进行对象读取时遇到的问题及解决方法。重点在于理解ObjectOutputStream在文件头尾添加的标识,并警告避免使用追加模式写入,强调应先读取文件对象再进行添加。提供了一段包含详细注释的实战代码供读者参考,旨在帮助开发者理解如何正确处理对象流的读写操作。
摘要由CSDN通过智能技术生成


IO流里的对象读取总是出错!各种报错!!神烦啊!!百思不得其解啊!然后就上网百度!找了好久终于让我找到了!下面就让我来说一说!

当你用IO流里的对象流写入的时候,ObjectOutputStream会在文件中的开头和结尾进行一个标识AC/DC,ObjectInputStream会严格的根据开头和结尾来进行读取,当读取不到的时候就会进行报错!!

ObjectOutputStream无法将上一次的对象的结尾的DC消除,所以千万不要用FileOutPutStream(“文件地址”,true)来添加;

当想要向文件中再次添加对象的时候,必须先进行读取文件中的对象并添加在集合中完毕后并关闭资源,然后遍历集合进行添加对象完毕并关闭资源!-----》先读取后添加!

代码中的注意点有一点是橘色的,这个很重要!当进行close的时候结尾(DC)也会随之而添加上!

我这个人比较倾向于实战!可以直接将我的代码复制到各位的eclipse中或其他的什么!代码中有详细的解释和一些被我注释掉的代码!那些也是正确可以运行的!各位也可以进行比较一下哪种方法好!

如果有错误的话,请指正!!!

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
//想要序列化对象必须接口Serializable,否则不能被序列化
class Car implements Serializable{

    /**
     * 给对象添加一个唯一的ID,便于以后增删成员变量!
     */
    private static final long serialVersionUID = 1L;
    String brand;
    transient String owner;//添加transient  防止此成员变量被泄露!
    public Car(String brand,String owner){
        this.brand = brand;
        this.owner = owner;
    }
    
}

public class ObjectOutAndIn {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /**
         * ********写入方法**********
         */
        /*(1)*///writerIn();
        /**
         * ********读取方法**********
         */
        /*(2)*///readerOut();
        /**
         * ****读取/写入多个对象的方法****
         * 建议将步骤一和二注释掉!
         */
        /*(3)*/writerInAndreaderOut();
    }
    
    public static void writerInAndreaderOut(){
        /**
         * 当想写入多个对象时,有两种方法!
         * 方法一:(1)创建一个集合将对象添加进该集合,然后将集合的对象写入文件中;
         *           (2)等到用的时候直接读取集合对象,从集合中获取对象
         * 方法二:(1)创建一个集合将对象添加进该集合,然后遍历集合对象
         *            (2)用同一个对象写入流来写入对象
         * 对象写入注意:(1)当写入对象的时候,对象写入流会在开头和结尾添加AC/DC
         *                 (2)必须用同一个对象写入流写入,因为在对象写入流close的时候会添加DC
         *                 ,再次写入另外
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值