IO流

三, IO流的分类


    IO:读写文件数据。
    IO:有一个经典的模型,水流模型。


    按照流的方向:
          输入流:以内存为基准,将磁盘文件的数据或者是网络等介质的数据流入到内存的流
          称为输入流。
 输出流:以内存为基准,将内存中的数据流出到磁盘文件或者网络或者其他介质的流
          称为输出流。


    按照流的数据内容:
          字节流:流中流的一个一个的字节,那么这样的流称为字节流。
          字节输入流 :流字节的输入流
  字节输出流 : 流字节的输出流
 
 字符流:流中流的是一个一个的字符,那么这样的流称为字符流。
  字符输入流 :流字符的输入流
  字符输出流 : 流字符的输出流


四,io流的类  
   
     字节输入流               字节输出流                字符输入流            字符输出流                           
    InputStream(读字节流)     OutputStream               Reader                Writer
    FileInputStream           FileOutputStream           FileReader            FileWriter
    ByteArrayInputStream      ByteArrayOutputStream      CharArrayReader       CharArrayWriter       读写数组         PipedInputStream         PipedOutputStream            PipedReader            PipedWriter        读写管道                                                               StringReader          StringWriter        读写String         上面4行都是节点流,且读写数组的、读写字符串的节点流,其实并不常用!
    FilterInputStream         FilterOutputStream         FilterReader          FilterWriter          过滤流基类
    BufferedInputStream       BufferedOutputStream       BufferedReader        BufferedWriter        缓冲流 
                              PrintStream                                      PrintWriter          打印流
                                                         InputStreamReader     OutputStreamWriter    转换流
    DataInputStream          DataOutputStream                                                          特殊流
    ObjectInputStream        ObjectOutputStream           
    
    字符字节:
        对于GBK编码而言  :一个中文字符是由2个字节组成的,英文字符依然是1字节。
对于UTF-8编码而言:一个中文字符一般是由3个字节组成的,英文字符依然是1字节。
    
    字节流:
          a.字节输入流(InputStream:抽象类,抽象类不能直接使用)
    1.第一个实现类FileInputStream:文件字节输入流 
          --- 以字节的方式将文件的数据输入到内存中。
  --- 使用文件字节输入流读取文件的内容并打印出来(读文本文件)
                       字节流根本不适合读取文本文件的内容输出打印,无法避免乱码的。
          b.字节输出流(OutputStream:抽象类)
    1.第一个实现类FileOutputStream:文件字节输出流 
          --- 以字节的方式将文件的数据从内存中输出到磁盘。
         
 c.复制 
     字节输入流和字节输出流接通。

     字节流可以用于一切文件的复制,复制前后的文件格式编码必须一致


        d.剪切
         复制完成后将源文件删除掉。
    
    字符流: 
          a. 字符输入流(Reader:抽象类,抽象类不能直接使用)
      1.第一个实现类FileReader:文件字符输入流 
           --- 以字符的方式将文件的数据输入到内存中。
   --- 如果文件本身的编码与代码使用的读写编码不一致将会出现乱码 
例如:代码的编码是UTF-8而文件是GBK,所以读出来会乱码 


          b.字节字符输入流(转换流) InputStreamReader 
      1.转换流可以使用指定的编码将字节流转换成字符流 
  Reader isr = new InputStreamReader(is,"GBK");
  转换流可以解决不同编码下读取文件乱码的问题。
          
 c.字符输出流( Writer:抽象类,抽象类不能直接使用)
      1.第一个实现类FileWriter:文件字符输出流 
           --- 以字符的方式将内存中的数据输出到文件中。
          
 d.字符流复制 
      注意:只要读到输入流的字符没有乱码之后就不会乱码了。
  
          总结: 字符相关操作(文本文件),建议都使用字符流处理。
         图片,多媒体文件,建议都应该使用字节流处理,而不能使用字符流来读多媒体文件。
    
    缓冲流:
          计算机的内存速度是很快的,但是io是很慢的
 高速的内存要等低速的io操作,也就意味着内存资源
 还有CPU资源都被低速的io阻塞了。


 可以提高性能。


 注意:缓冲字符流多出了一个可以按照数据行 一行一行的读数据 
        readline()方法


    打印流:
          从内存中输出数据出去
          PrintStream : 打印字节出去 
 PrintWriter : 打印字符出去 
   
    字节数组流,字符数组流:
 ByteArrayOutputStream
          可以把文件转换成一个字节数组或字符数组
    
     特殊数据流:
          DataInputStream   : 特殊数据字节输入流      
 DataOutputStream  : 特殊数据字节输出流  


 io流就是一个水管只能读取一次 


 特殊数据流,写数据与读数据必须一致,而且应该严格从第一个数据开始读取。
  
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值