字节流,字符流,序列化和反序列化

字节流

  1. 可以操作所有的所有类型的文件

1.文件对象
    //创建文件对象
    File file = new File("文件的所在的路径");
    //如果文件的所在的路径不存在,则创建对应的文件夹,如果已存在,则无效果
    file.createNewFile();
​
2.字节输出对象(程序对文件进行输出)[直接对文件进行操作]
    //创建输出对象
    FileOutPutStream fops = new FileOutPutStream("文件所在的路径");
    //将字符串转换为字节存入到指定文件中
    String num = "中国";
    fops.write(num.getBytes());
    //关闭输出流
    fops.close();
​
3.字节输入流对象(程序读取指定文件的内容)[直接对文件进行操作]
    FileInputStream fis = new FileInputStream("文件指定路径");
    //计算读取的次数
    int count = 0;
    //存入每次读取的内容,每次读取10个字节
    byte[] b = new byte[10];
    //当每次读取的次数非等于-1时
    while ((count = s.read(l)) != -1){
        //将读取的内容转换为字符串,并输出
        System.out.println(new String(b,0,count));
    }
    //关闭输入流对象
    fis.close();
​
4.字节流输出对象加强版(程序对文件进行输出)[先将要操作的内容放到缓冲区,等所有操作执行完成,一并在放入缓存文件]
    //加强版的属于高层流,使用加强版的时候必须要有底层流
    //创建底层流输出对象
    FileOutPutStream fops = new FileOutPutStream("文件所在的路径");
    //创建高层流输出对象
    BufferedOutputStream bffops = new BufferedOutputStream(fops);
    //将字符串转换为字节存入到指定文件中
    String num = "中国";
    bffops.write(num.getBytes());
    //关闭输出流,先关闭高层流,在关闭底层流
    fops.close();
​
5.字节流输入对象加强版(从指定文件读取内容到程序中)[先将要操作的内容放到缓冲区,等所有操作执行完成,一并在放入]
    //加强版的属于高层流,使用加强版的时候必须要有底层流
    //创建底层流读取对象
    FileInPutStream fops = new FileInPutStream("文件所在的路径");
    //创建高层流读取对象
    BUfferedInputStream bis = new BUfferedInputStream(BUfferedInputStream);
    //计算读取的次数
    int count = 0;
    //存入每次读取的内容,每次读取10个字节
    byte[] b = new byte[10];
    //当每次读取的次数非等于-1时
    while ((count = bis.read(l)) != -1){
        //将读取的内容转换为字符串,并输出
        System.out.println(new String(b,0,count));
    }
    //关闭输出流,先关闭高层流,在关闭底层流
    bis.close();
    fops.close();

字符流

1.只能操作纯文本的文件

1.  //创建字符流输出对象
    FileWriter fw = new FileWriter("指定文件的路径");
    //直接将字符串写入到指定文件中,因为他是对字符操作,而不用转字节型
    String num = "张三";
    fw.writer(num);
    //关闭流
    fw.close();
​
2.  //构建输入(读取)对象
    FileReader fr = new FileReader("指定文件的路径");
    //定义变量保存数据
    int b ;
    //存入字符数据的数组,每次读取两个字符
    char[] c = new char[2];
    //循环读取
    while ((b=r.read(c)) != -1) {
        System.out.print(new String(c,0,b));
    }
    //关闭流
    r.close();
​
4.  //创建底层流
    FileWriter fw = new FileWriter("D:\\桌面\\新建文件夹\\zs.txt");
    //创建写入对象
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("张三是sb");
    //关闭流
    bw.close();
    fw.close();
​
5.  //创建底层流
    FileReader fr = new FileReader("D:\\桌面\\新建文件夹\\zs.txt");
    //创建高层流
    BufferedReader br = new BufferedReader(fr);
    String str = null;
    while ((str=br.readLine()) != null) {
        System.out.println(str);
    }
​
​

序列化和反序列化

  1. Java序列化就是指把Java对象转换为字节序列的过程

  2. Java反序列化就是指把字节序列恢复为Java对象的过程。

        要实现序列化时,对象一定要实现Serializable接口,否则不能序列化成功
​
1.序列化(将对象存入文件中)
        //创建map集合对象
        Map map = new HashMap();
        //创建多个学生对象
        Student zs = new Student(1,"张三",15);
        Student zl = new Student(2,"赵六",16);
        Student ww = new Student(3,"王五",17);
        //将学生对象存入集合中
        map.put(zs.getId(),zs);
        map.put(zl.getId(),zl);
        map.put(ww.getId(),ww);
        //创建底层流,指定路径
        FileOutputStream fio = new FileOutputStream("D:\\桌面\\新建文件夹\\zs.txt");
        //创建序列化对象
        ObjectOutputStream oop = new ObjectOutputStream(fio);
        //将集合存入到指定文件
        oop.writeObject(map);
        //关闭写流
        oop.close();
        fio.close();
​
2.反序列化(将存入文件中的对象读取出来)
        //创建读取底层流对象
        FileInputStream ism = new FileInputStream("D:\\桌面\\新建文件夹\\zs.txt");
        //创建反序列化对象
        ObjectInputStream ins = new ObjectInputStream(ism);
        //读取指定文件
        Map map1 = (Map)ins.readObject();
        //获取集合
        //System.out.println(map);
        for (Object i : map1.keySet()) {
            System.out.println("key:"+i+",value:"+map1.get(i));
        }
        //关闭流
        ins.close();
        ism.close();

总结

  1. 要对文本文件进行读写时用字符流,使用其他文件时使用字节流

  2. 序列化和反序列化是对文件进行操作,一般案例用为存档,比如刷副本游戏中的角色是一个对象,他还有多少血,装备是什么,当自己打完之后,进行存档,下次进入游戏则来到存档的状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁惜若༒奔已꧂

争取做到更好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值