JavaIO知识简述


IO流简介

IO即input(输入)/output(输出),input就是将数据加载到计算机内存,output就是将数据加载到文件,数据库等设备中.
IO流主要包含

-字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

InputStream

抽象类,是所有字节输入流类的父类
其子类包括:
在这里插入图片描述

  • 常用方法
    • read():返回输入流中下一个字节的数据
      比如我在src目录下写一个a.txt文件,文件内容是鸡你太美
      因为read方法每一次读取一个字节然后指针移到下一个字节,当返回值为-1时表示读到文件末尾

      InputStream inputStream= null;
              try {
                  inputStream = new FileInputStream("src\\a.txt");
                  int read = 0;
                  while((read=inputStream.read())!=-1){
                      System.out.println(read);
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              } finally {
                  if (inputStream != null) {
                      try {
                          inputStream.close();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                  }
              }
      
      

      返回值是

      233
      184

      因为UTF-8一个汉字占三个字节比如"鸡"用字节表示就是"233 184 161",而每次读取的是一个字 节所以不能将"鸡"展示出来

    • read(byte b[]):将输入流读取的字节存储到字节数组b中

      InputStream inputStream=new FileInputStream("src\\a.txt");
              byte[] b=new byte[20];
              int num=0;
              while((num=inputStream.read(b))!=-1){
                  System.out.println(new String(b));
              }
              inputStream.close();
      

      返回结果为:“鸡你太美”

    • read(byte b[],int off,int len):在read(byte[] b)基础上增加了off(偏移量),len(最大字节数)
      在这里插入图片描述

      返回结果:

      鸡你太

      源码:
      在这里插入图片描述

    • skip(long n):忽略流中的n个字节,返回实际忽略的字节数
      skip(3)后执行上面的read(byte[] b)结果是"你太美"

OutputStream

抽象类,是所有字节输出流的父类

  • 常用方法
  • write(int b):将字节b写入到输出流
  • write(byte b[])将字节数组b写入输出流
  • write(byte[] b,int off,int len):在write(byte b[])增加off,len
  • flush(): 刷新输出流,并将资源释放
    这些方法作用与InputStream基本相同只是方向不同

Reader

  • 如果我们不知道编码格式将文本类型转换为字符类型就会出现乱码
  • JVM将字节转换为字符会消耗时间

一般像音频,图片之类的文件使用字节流,一些文本使用字符流

		Reader reader=new FileReader("src/a.txt");
        char[] cbuf=new char[3];
        int read = reader.read(cbuf);
        System.out.println(new String(cbuf));

鸡你太

  • 常用方法
    • read()从输入流读取一个字符
    • read(char[] cbuf)从输入流读取字符存储到cbuf
    • read(char[] cbuf,int off,int len)
    • skip(long n)

Writer

  • 常用方法
  • write(int c)
  • write(char[] cbuf)
  • write(char[] cbuf,int off,int len)
  • append(char c)
  • flush()
		Writer writer=new FileWriter("src/a.txt");
        writer.write("sdasd");
        writer.append("12");
        writer.close();

源文件内容是"鸡你太美"
现在是sdasd12
write写入会覆盖原内容,append是在后面追加

缓冲流

因为IO操作效率低且消耗性能,在IO流上添加适配器,将数据加载到缓冲区,避免频繁的IO操作,提高运输效率
他们的构造方法参数为对应的抽象类的子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值