java io流 随记

java io流

 IO的体系。所具备的基本功能就有两个:读、写
 1.字节流
 InputStream(读) OutputStream(写)
 2.字符流
 Reader(读) Writer(写)
 
 基本的读写操作方式:
  因为数据通常都以文件形式存在
 
  所以就要找到IO体系中可以用于操作文件的流对象
 
 字节流和字符流的区别:
  1.字节流读取的时候,读到一个字节就返回一个字节。
  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在utf-8
  码表中是3个字节)时。先去查指定的编码表,将查到的字符返回
  2.字节流可以处理所有类型数据,如图片、mp3、avi。
  而字符流只能处理字符数据
 
  结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。
 
                                   BufferedReader
               reader        InputStreamReader    FileReader 
 字符流
               writer         BufferedWriter
                                  OutputStreamWriter   FileWriter
                       
                                           FileInputStream
              InputStream      FilterInputStream     BufferedInputStream         
 字节流   
             OutputStream    FileOutputStream
                                          FilterOutputStream   BufferedOutputStream 
                      
                      
   
  对于读取或者写入流对象的构造函数,以及读写方法,还有刷新关闭功能
  会抛出IOException或其子类
  所以都要进行处理。或者throws抛出,或者try catch处理
 
  目前学习的流对象
    字符流
    FileReader     FileWriter
    BufferedReader BufferedWriter
    字节流
    FileInputStream      FileOutputStream 
    BufferedInputStream   BufferedOutputStream
   
    字节流的read()方法读取一个字节,返回的不是byte类型,而是int类型
   
    对于write方法,可以一次写入一个字节,但接收的是一个int类型数值
    只写入该int类型的数值的最低一个字节(8位)
   
    简单说:read方法对读到的数据进行提升,write对操作的数据进行转换
  
   转换流
     特点:
     1、是字节流和字符流之间的桥梁。
     2、该流对象中可以对读取到的字节数据进行指定编码表的编码转换
    
     什么时候使用?
     1、当字节和字符之间有转换动作时。
     2、流操作的数据需要进行编码表的指定时。
    
     具体的对象体现:
     1、InputStreamReader:字节到字符的桥梁
     2、OutputStreamWriter:字符到字节的桥梁
    
     注意:
     在使用FileReader操作文本数据时,该对象使用的是默认的编码表
     如果要使用指定编码表时,必须使用转换流
     例:
     FileReader fr=new FileReader("a.txt");
     //操作a.txt中的数据是使用系统默认的编码(默认为GBK)
     InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"));
     //这操作a.txt中的数据也是使用系统默认的编码
     
      如果a.txt中的文件的字符数据是通过utf-8的形式编码,这时就必须指定编码表
      InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"utf-8");
     
      当指定绝对路径时,定义目录分隔符有两种方式
      1、反斜线 但是一定要写2个。\\ new FileWriter("d:\\demo.txt");
      2、斜线  写一个即可。/  new FileWriter("d:/demo.txt"); 
     
    字符流的缓冲区
      缓冲区提高了对流的操作效率
      bufferedWriter:
         特有方法:newLine();//跨平台的换行符
      BufferedReader:
         特有方法:readLine();//一次读一行,到行标记时,将行标记之前的字符
         数据作为字符串返回,当读到末尾时,返回null。
    
     流操作的基本规律
       1、明确数据源和数据汇(数据目的)。其实是为了明确是输入还是输出流
       2、明确操作的数据是否是纯文本数据。其实是为了明确字符流还是字节流
      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值