IO的使用

一、流(IO)的定义:实现的是两个设备之间的数据传输;

    补充:IO:input、output,设备:网络,磁盘,内存,控制台,键盘,文件

二、流的分类:

    1)根据操作的方式分类:输入流和输出流

    2)根据数据的类型分类:字节流(InputStream,OutputStream)和字符流(Reader,Writer),均以内存为参考

        ①字节流:传输的是字节,可以操作任意类型的数据的传入与传出(图片,音频,文本)

        ②字符流:传输的也试字节,好处是在字节的基础上融入了编码,操作更方便,只能传输文本类型的数据  (文本)

三、使用IO步骤:

    public static void main(String[] args){

    //创建文件

        File file = new File(path);

    //创建Writer子类,并关联文件

        FileWriter fileWriter = new FileWriter(file);

    //调用方法

        fileWriter.writer("wangda");

      //关闭流

        fileWriter.close();

    }

四、文件复制:

    public void copy(){

        FileWriter writer = new FileWriter(复制来的文件);

        FileReader read = new FileReader(复制的源文件);

        int num = 0;

        char[] arr = new char[10];

        while((num=read.read(arr))!=-1){

            writer.writer(arr,0,num);

        }

    read.close();

    writer.close();

    }

五、缓冲流:字符的缓冲流(缓冲区),为了提高读写的能力,但是本身没有读写的能力,如果实现读写必须借助于字符流

        (可以将缓冲流类比于催化剂或高速的小车)

    1)缓冲流的分类:

        ①字符缓冲输入流:BufferedReader

        ②字符缓冲输出流:BufferedWriter

    2)实例:

        public static void main(String[] args){

            FileWriter writer = new FileWriter(path);

            BuffererWriter bWriter = new BufferedWriter(writer);

            bWriter.writer("bingbing");

            bWriter.close();

        }

六、使用缓冲流实现文件的复制:

    public void copy(){

        BufferedReader  read  = new BufferedReader(new FileReader(path));

        BufferedWriter writer = new BufferedWriter(new FileWriter(path));

        String str = null;

        while((str = read.readLine()!=null){

            writer.writer(str);

        }

    read.close();

    writer.close();

    }

七、字节流实例:

    1)文件的写出操作

        public static void fileWriter(){

            OutputStream out = new FileOutputStream(path);

            out.writer("wangda".getBytes());

            out.close();

        }

    2)文件对的读操作一个一个读

        public static void fileRead1(){

            InputStream input = new FileInputStream(path);

            int num = 0;

            while((num=input.read())!=-1){

                System.out.print((char)num);

            }

            input.close();

       }

        3)一次读多个

        public static void fileRead2(){

            InputStream input = new FileInputStream(path);

            int num = 0;

            byte[] data = new byte[10];

            while((num = input.read(data))!=-1){

                System.out.print(new String(arr,0,num);

            }

            input.close();

        }

        4)一次读完所有的字节

        public static void fileRead3(){

            InputStream input = new FileInputStream(path);

            int temp= input.available;

            byte[] data = new byte[temp];

            input.read(data);

            System.out.print(new String(data));

              input.close();

}

### 如何检查系统IO使用率 在Linux系统中,可以使用多种命令行工具来检查系统的IO使用率。以下是一些常用的工具及其用法: #### 1. 使用 `top` 命令 `top` 命令可以实时显示系统的CPU和内存使用情况,同时也能查看到与IO相关的指标。在 `top` 的输出中,`wa` 列表示等待IO的时间百分比[^1]。如果 `wa` 的值较高,则可能意味着系统存在IO瓶颈。 ```bash top ``` #### 2. 使用 `vmstat` 命令 `vmstat` 是一个用于监控系统性能的工具,它可以显示内存、交换、IO等信息。通过指定时间间隔(如 `vmstat 1`),可以持续观察系统的IO状态。其中,`bi` 和 `bo` 分别表示每秒从块设备读入和写入的数据量,而 `wa` 表示等待IO操作完成的时间百分比[^1]。 ```bash vmstat 1 ``` #### 3. 使用 `iotop` 命令 `iotop` 是一个专门用于监控磁盘IO的工具,类似于 `top`,但它专注于显示每个进程的IO使用情况。如果没有安装,可以通过包管理器安装,例如在Debian/Ubuntu系统中使用 `apt-get install iotop` 安装。 ```bash iotop ``` #### 4. 使用 `sar` 命令 `sar` 是一个强大的系统活动报告工具,能够收集、报告和保存系统活动信息。通过 `-d` 参数可以查看设备级别的IO统计信息,而 `-b` 参数则用于查看整体的IO传输速率。 ```bash sar -d 1 5 # 每隔1秒采集5次数据,显示设备IO统计 sar -b 1 5 # 每隔1秒采集5次数据,显示系统IO传输速率 ``` #### 5. 使用 `dstat` 命令 `dstat` 是一个全能型的系统资源统计工具,可以同时监控CPU、内存、网络和IO等多个方面的性能指标。它提供了更直观的输出格式,并且支持自定义列显示。 ```bash dstat --disk --io ``` #### 6. 使用 `iostat` 命令 `iostat` 是另一个专门用于监控IO性能的工具,属于 `sysstat` 软件包的一部分。它可以显示CPU使用率以及设备和分区的IO统计信息。通过 `-x` 参数可以获取更详细的扩展统计信息。 ```bash iostat -x 1 5 # 每隔1秒采集5次数据,显示扩展IO统计 ``` #### 7. IO等待过高时的排查方向 如果发现系统的IO等待时间较长,可以根据具体的场景进行进一步分析。例如: - 如果用户态进程占用较高的CPU,可能是由于应用程序本身的性能问题导致,需要重点排查进程的性能瓶颈[^2]。 - 如果内核态占用较多的CPU,可能是由于内核线程或系统调用的问题引起的,需要分析相关内核行为[^2]。 - 如果软中断或硬中断较高,可能是由于网络或硬件设备的中断服务程序过于繁忙,需要检查相应的驱动程序或硬件状态[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值