Java IO

头像
    阅读 3 分钟

    IO

    概述
    in是指读取,指从磁盘读取到程序的过程。

    out是指写出,指从程序里写出到磁盘的过程。

    不管是in还是out,都是以程序为准。


    在Java中,根据处理的数据单位不同,分为字节流和字符流。

    字节流:只能读写文本文件 txt

    字符流:所有文件都可以读写 txt jpg mp4


    流的概念

    数据的读写抽象成数据,在管道中流动。

    流只能单方向流动

    输入流用来读取in

    输出流用来写出Out

    数据只能从头到尾顺序的读写一次


    File文件流

    概述

    封装一个磁盘路径字符串,对这个路径可以执行一次操作。

    可以用来封装文件路径、文件夹路径、不存在的路径。
    image


    递归

    现象

        方法内部 调用 方法本身
        a(){
            1,列出所有资源
            2,判断,是文件就求和
            3,判断,是文件夹就继续执行1 2 3
            a(); //递归
        }

    递归是方法内部调用方法本身的现象,是一种算法,需要多次重复计算的情况可以用递归来大大地减少了程序的代码量。但是递归也有缺点,相对常用的普通循环等,运行效率较低;在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,所以递归次数过多容易造成栈溢出等。通过递归的方式删除的文件,在回收站是找不到的。


    字节流读取

    字节流是由字节组成的,字符流是由字符组成的. Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据。
    字节流是用来解决对所有文件的读和写
    字节读取流专门用来把磁盘里的各种文件读取到程序中的过程--in

    流式传输主要指将整个音频和视频及三维媒体等多媒体文件经过特定的压缩方式解析成一个个压缩包,由视频服务器向用户计算机顺序或实时传送。在采用流式传输方式的系统中,用户不必像采用下载方式那样等到整个文件全部下载完毕,而是只需经过几秒或几十秒的启动延时即可在用户的计算机上利用解压设备对压缩的A/V、3D等多媒体文件解压后进行播放和观看。此时多媒体文件的剩余部分将在后台的服务器内继续下载。
    image


    BufferedInputStream子类

    BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组(默认8M大小)。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。BufferedInputStream底层,维护了一个byte数组,默认容量是8192,所以读的时候不再是一个一个读,而是一组一组的读了。也叫高级流/缓冲流。
    image


    字节流写出

    OutputStream抽象类

    此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。

    FileOutputStream子类

    image
    FileOutputStream创建对象时第二个参数boolean append表示是否追加,如果指定true就是追加,否则默认是数据覆盖。


    BufferedOutputStream子类

    该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。使用高级输出流输出数据,如果不满一个数组无法刷出去,必须要配合close和flush两个方法,才能把数据刷出去。BufferedOutputStream底层,维护了一个byte数组,默认容量是8192,所以读的时候不再是一个一个读,而是一组一组的读了。也叫高级流/缓冲流。
    image

    IO关闭资源

    1,说明
    如果把关闭资源的代码,写在了try里,或者不做任何处理
    很有可能资源得不到释放.为了一定要执行close()
    需要把释放资源的代码放在finally里
    finally里,放的是一定要被执行的代码,即使有异常也会执行


    序列化和反序列化

    序列化是指把对象转换为字节
    把字节转换为对象是反序列化


    序列化和反序列化应用场景

    1.将对象转换为字节存储到内存或文件
    2.将对象转为字节通过网络进行传输

    Java中对象序列化的实现

    1.ObjectOutputStream(序列化)
    2.ObjectInputStream(反序列化)

    序列化ID是对类的版本进行唯一标识,建议只要实现序列化接口,都要手动添加这个ID

    import lombok.Data;
    import java.io.Serializable;
    import java.util.List;
    
    @Data
    public class PageObject <T> implements Serializable {
        private static final long serialVersionUID = -3130527491950235344L;
    
        //总记录数
        private Integer rowCount;
        //当前页记录
        private List<T> records;
        //总页数
        private Integer pageCount;
        //页码值
        private Integer pageCurrent;
        //页面大小(页面最多显示多少条记录)
        private Integer pageSize;
    
    }

    16 声望8 粉丝

    « 上一篇
    Java API
    下一篇 »
    Java 集合