IO总结

IO基本概念讲解

IO流概念

  • IO流是实现输入/输出的基础,方便的实现了数据的输入/输出操作,在java把不同的输入/输出抽象为“流”,流是一组有顺序,有起点和终点的字节集合,是对数据传输的总称或抽象。

IO流分类

输入流和输出流。
输入流:只能从中读取数据,而不能向其中写入数据。(如:从硬盘读取文件到内存)
输出流:只能向其写入数据,而不能从中读取数据。(如:从内存读取数据到硬盘)
字节流和字符流
字节流:以字节为单位,每次读取或写入是8位数据,可以读取任意类型数据。
字符流:以字符为单为,每次读取或写入是16位数据,只能读取字符类型数据。
读取文本文件优先考虑字符流,读取图片,视频等非文本类型的只能使用字节流。
节点流和处理流
节点流:直接与数据源相连,读入或读出,也被称之为低级流。
处理流:是对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写操作,也被称之为高效流。

IO流结构图

在这里插入图片描述

IO流的四大基类(四大基类均为抽象类不可实例化)

|
|_Reader
|_Writer
|_InputStream
|_OutputStream
  • Reader常用方法
int read();
//读取一个字符并以整数形式返回,如果返回-1表示已到输入流末尾。
int read(char[] buffer)//读取一系列字符并存储到一个数组buffer,返回实际读取的字符数,如果读取前已到输入流末尾返回-1
int read(char[] buffer,int off,int len);
//读取length个字符并存储到一个字符数组buffer,从off位置开始,最多len,返回实际读取字符数,如果读取前已到输入流末尾返回-1.
  • Writer常用方法
void write(int c);
//向输出流中写入字符数据,该字节数据为参数
void write(char[] c);
//将一个字符类型的数组中的数据写入到输出流。
void write(char[] c,int off,int length);
//从一个字符类型的数组中的指定位置开始,length个字符写入到输出流。
void write(String string);
//将一个字符串中的字符写入到输出流。
void write(String ,int off,int length);
//将一个字符串从off开始的length个字符写入到输出流.
void flush();
//将输出流中的缓冲数据全部写出到目的地。
  • InputStream常用方法
int read();
//读取一个字节并以整数的形式返回,如果返回-1已到达输出流末尾。
int read(byte[] buffer);
//读取一系列字节并存储到一个数组,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
int read(byte[] buffer,int off,int len);
//读取length个字节并保存到一个字节数组,从off位置开始存,最多len,返回实际读取的字节数,如果读取前已到输出流的末尾返回-1.
  • OutputStream常用方法
void write(int b);
//向输出流中写入一个字节数据,该字节数据为参数b。
void write(byte[] b);
//将一个字节类型的数组中的数据写入到输出流。
void write(byte[] b,int off,int len);
//将一个字节类型的数组中的数据从指定位置开始,len个字节写入到输出流。
void flush();
//将输出流中的缓冲数据全部写出到目的地。

注:java的IO流执行完成后,均要关闭流,调用close()方法,释放资源

  • InputStream/OutpurStream简单演示
/**
 * @program: Bridge Pattern
 * @description:测试高效流与普通流用时
 * @author: Mr.Yan
 * @create: 2019-03-03 01:35
 **/

public class IO {
    public static void main(String[] args) throws Exception {

        IO.buffer();
        IO.file();
    }

    public static void buffer() throws Exception {
        long l = System.nanoTime();
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\迅雷下载\\win7x64.iso"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\高效流.iso"));
        byte[] b = new byte[1024 * 1024];
        int i;
        while ((i = bis.read(b)) != -1) {
            bos.write(b, 0, i);
        }
        long l1 = System.nanoTime();
        System.out.println("高效流用时:" + (l1 - l) / 1000 + "秒");
        bis.close();
        bos.close();
    }

    public static void file() throws Exception {
        long l = System.nanoTime();
        FileInputStream fis = new FileInputStream(new File("E:\\迅雷下载\\win7x64.iso"));
        FileOutputStream fos = new FileOutputStream(new File("E:\\file.iso"));

        byte[] b = new byte[1024 * 1024];
        int i;
        while ((i = fis.read(b)) != -1) {
            fos.write(b, 0, i);
        }
        long l1 = System.nanoTime();
        System.out.println("普通流用时:" + (l1 - l) / 1000 + "秒");
        fis.close();
        fos.close();
    }

}


  • Reader/Writer简单演示
public class IO2 {
    public static void main(String[] args) throws Exception {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\使用说明.txt"),"utf-8");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\aaa.txt"),"utf-8");
        int i;
        char[] c = new char[1024];
        while ((i = isr.read(c))!= -1) {
            osw.write(c,0,i);
        }
        isr.close();
        osw.close();
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值