专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Java之Input、OutputStream流

JAVA核心包 java.io包介绍

介绍什么是IO,在开发中的使用场景

  • Input / Output 即输入 / 输出
    • 输入流:程序(内存)-> 外界设备
    • 输出流:外界设备–>程序(内存)
  • 处理数据类型分类
    • 字符流:处理字符相关,如处理⽂本数据(如txt⽂件), Reader/Writer
    • 字节流:处理字节相关,如声⾳或者图⽚等⼆进制,InputStream/OutputStream

字节流和字符流的区别

字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,⼀次可能读多个字节,字节流可以处理⼏乎所有⽂件,字符流只能处理字符类型的数据

功能不同,但是具有共性内容,通过不断抽象形成4个抽象类,抽象类下⾯有很多⼦类是具体的实现

  • 字符流 Reader/Writer
  • 字节流 InputStream/OutputStream

81_1.png

Java IO包之缓冲Buffer输⼊输出流

解缓存输⼊流BufferInputStream,和缓冲输出流BufferOutputStream

  • 是缓冲 Buffer 它是内存空间的⼀部分,在内存空间中预留了⼀定的存储空间,这些存储空间 ⽤来缓冲输⼊或输出的数据,这部分空间就叫做缓冲区,缓冲区是具有⼀定⼤⼩的,
  • 为啥要⽤缓冲
    • 缓冲,缓和冲击,例如操作磁盘⽐内存慢的很多,所以不⽤缓冲区效率很低
    • 数据传输速度和数据处理的速度存在不平衡,⽐如你每秒要写100次硬盘,对系统冲击很⼤,浪费了⼤量时间在忙着处理开始写和结束写这两个事件,⽤buffer暂存起来,变成每10秒写 ⼀次硬盘,数据可以直接送往缓冲区,⾼速设备不⽤再等待低速设备,对系统的冲击就很 ⼩,写⼊效率⾼了
  • Java IO包⾥⾯的两个缓冲类(⾼级流)
    • BufferInputStream 和 BufferOutputStream
    • 采⽤包装设计模式(锦上添花的意思)

面试点

BufferInputStream 缓冲字节输⼊流

BufferedInputStream 通过预先读⼊⼀整段原始输⼊流数据⾄缓冲区中,⽽外界对BufferedInputStream的读取操作实际上是在缓冲区上进⾏,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输⼊流中载⼊下⼀截数据填充缓冲区,然后外界继续通过缓冲区进⾏数据读取

优点:避免了⼤量的磁盘IO,原始的InputStream类实现的read是即时读取的,每⼀次读取都会是⼀次磁盘IO操作(哪怕只读取了1个字节的数据),如果数据量巨⼤,这样的磁盘消耗⾮常可怕。

缓冲区的实现: 读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进⾏⼀次磁盘IO,载⼊⼀段数据填充缓冲,下⼀次读取⼀般情况就直接可以从缓冲区读取,减少了磁盘IO。

实战(文件复制)

public class IOStudy {
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\28518\\Desktop\\test\\");
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1.getName());
        }

        copyFile();

    }

    public static void copyFile() throws IOException {
        File file=new File("C:\\Users\\28518\\Desktop\\test\\origin.txt");
        File file2=new File("C:\\Users\\28518\\Desktop\\test\\copy.txt");
        FileInputStream fis = new FileInputStream(file);
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream(file2);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int size;
        byte[] bytes = new byte[1024];
        while ((size = bis.read(bytes)) != -1){
            bos.write(bytes,0,size);
        }
        bis.close();
        bos.close();
    }
}

81_2.png

文章永久链接:https://tech.souyunku.com/27236

未经允许不得转载:搜云库技术团队 » Java之Input、OutputStream流

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们