IO流初识

IO流其实很简单 我不打算学的深入 够用就行了
首先看一个不太好友好的东西
在这里插入图片描述

这张图看完 我们记住1个知识点,
  • 1 末尾是Steram是字节流 其他的都是字符流
    在这里插入图片描述
这张图看完 我们也记住1个知识点
  • 1 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,

四个类

 public static void main(String[] args) throws IOException {
        //=============================字节流 读取=========================================
        // 路径必须正确
        FileInputStream fis = new FileInputStream("D:/mcd/create.txt");
        int num=fis.available();//返回的是目标文件中的字符个数,也是InputStream类中所特有的方法
        byte[]buf=new byte[num];
        fis.read(buf);//此种方法虽然简化了程序,提高了效率,但是用法不安全,容易造成内存溢出。
        System.out.println(new String(buf));
        fis.close();
        //=============================字节流 写入=========================================
        FileOutputStream fos=new FileOutputStream("D:/mcd/create.txt",true);//如果文件不存在,则创建它。如果存在,则覆盖他。  true 是否追加
        fos.write("12321".getBytes());//getBytes()使用平台的默认字符集将此
        /* 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

         * 此方法与FileWriter方法有区别:在不刷新缓冲区情况下,他直接将数据写入文件;因为他操作的是字节数据,不需要转化;
         * FileWriter虽然操作的是字符,但其底层还是操作的是字节,在把数据写入缓冲区/内存是,虚拟机会将相应的字符和一张码表对应(本机器的是GBK的,可以通过System.getProperties()方法查看)
         * 然后将相应的字符转化为相应的字节,所以会在内存中驻留,需用flush刷新该缓冲区,将其写入文件
         */
        fos.close();
        //=============================字符流 写入=========================================


        FileReader fr=null;//定义在try块的外面
        try{
            fr=new FileReader("D:/mcd/create.txt");
            int number=0;
            int reads=0;
            //while((reads=fw.read())!=-1)System.out.print((char)reads);//不带参数的read方法,返回的是所读取字符的ASCII码
            char []a=new char[1024];
            while((number=fr.read(a))!=-1){//调用的是带字符数组参数的read方法,返回的是所读取的字符个数;相比前一种,此种效率更快;
                System.out.print(new String(a,0,number));
            }
        }catch(IOException e){
            e.printStackTrace();//默认情况是把异常打印到控制台上
        }finally{
            try{
                if(fr!=null)fr.close();//关闭流
            }
            catch(IOException e){
                e.printStackTrace();
            }
        }

        //=============================字符流 读取=========================================

        // TODO Auto-generated method stub
        //创建一个FileWriter对象,该对象一被初始化就必须要明确要被操作的文件
        //而且该文件会被创建到指定的目录下,如果该目录下有同名文件,则覆盖它;如果不想覆盖原来内容,可以在创建流对象时向构造函数在加一个参数true。
        //其实该步就是要明确存放数据的目的地
        FileWriter fw=new FileWriter("D:/mcd/create.txt",true);
        fw.write("abc");
        //fw.close();
        fw.flush();//刷新,把缓冲里面的数据刷新到目标文件中,如果没有这步,将无法写入数据;
        fw.close();
    }

工具

文件切割

应用场景

  • 字符流:字符流一般用于处理纯文本类型的文件,如TXT文件等,
  • 字节流:可以用来处理纯文本文件,但是字符流不能用于处理图像视频等非文本类型的文件。字节流一般用来处理图像,视频,以及PPT,Word类型的文件。

面试

总结

目录地址
ByteArrayInputStreamhttps://blog.csdn.net/qq_37593817/article/details/115967517
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值