黑马程序员——java基础---IO---字符流

一、概述

  字符流,底层还是字节流,在使用字节读取字节数据后,会把两个或多个字节数据合并为一个编码值后,利用编码值去编码表中查找对应的字符。字符流=字节流+编码表

  开发中,常见的编码表:

    ASCII(美国):国际信息交换码。使用一个字节中的最低7位来存储 例:0-xxx xxxx(正数)

    ISO-8859-1(欧洲):拉丁码表。使用一个字节来存储。包含了ASCII码 例:1xxx xxxx(负数)

    B2312(中国):包含了6000多个中文字符。一个中文使用两个字节来存储 例:1 xxxxxxx 1xxx xxxx  (负数)

    GBK(开发中使用最多):gb2312的升级版。包含了20000多个中文符号。使用两个字节来存储。第一个字节是     负数,第二个字节是负数或正数。例:1xxx xxxx   1xxx xxxx0xxx xxxx

    GB18030:包含了简体中文、繁体、甲骨文、象形文

  因为不同的国家都具有自己的编码表,在使用时因为编码表不统一,不方便。

  世界计算机协会就统制定了一张编码表--国际标准信息码:

    unicode:国际标准信息码。JDK内置了这张码表。char类型就是使用这张码表任何数据都是使用两个字节来存

    UTF-8unicode码表的升级版。在UTF-8码表中为每个编码都添加了标记码存储数据时,可以使用一个字节来     存储,也可以使用两个字节来存储,可也可以使用三个字节来存储

  中文编码表:GBKGB2312GB18030unicodeUTF-8

  在开发中,经常使用的编码表:ISO-8859-1GBKUTF-8

二、字符输入流Reader

  Reader:是字符输入流的父类

  FileReader:用来从文件中读取字符的输入流

  FileReader的构造方法:

  FileReader(File file)

  在给定文件对象file的情况下,创建字符输入流对象FileReader(String fileName)在给定文件名称的情况下,创建字符流对象FileReader的常用方法:

  FileReader类中的方法全部都是来自于父类对象

  read() 读取一个字符

  read(char[] cbuf, int off , int length)读取多个字符,把读取到的字符数据存储char[]数组中,从off角标   开始取length长度

  close()关闭字符输入流

  在使用FileReader读取字符文件时,底层使用字节流把文件中存储的二进制数据读取,并暂存在FileReade内置的字节缓冲区中,在使用read时,就从内置缓冲区中一次读取两个字节数据,并且合并为一个编码值,再根据编码值去FileReader默认的编码表中查找对应的字符。


三、字符输出流Writer

  Writer:是字符输出流的父类

  FileWriter:用来向文件中写入字符的输出流

  FileWriter构造方法:

  FileWriter(File file) 根据给定的file对象创建字符输出流对象

  FileWriter(String fileName)根据给定的文件名创建字符输出流对象            

  FileWriter(File file,boolean append)根据给定的file对象创建字符输出流对象,可以续写  

  FileWriter(String fileName,boolean append)根据给定的文件名创建字符输出流对象,可以续写

  FileWriter常用方法:

  FileWriter类中的方法都是来自父类Writer

  write(charch) 一次写入一个字符

  write(char[] cbuf, int off , int len)一次向文件中写入多个字符数据。char[]数组中从off角标开始取len   长度个字符一次性写入

  write(String str)把字符串写入到文件中

  write(String str, int off , int len)

  flush() 把字符输出流中内置缓冲区下的字节数据,写入到文件中


四 、转换流

  在ReaderFileReader之间还有一个类:InputStreamReader

  在WriterFileWriter之间也有一个类:OutputStreamWriter

  1.转换流的作用:

    a.用来实现字节流和字符流之间的互相转换

    b.使用转换流来读写指定字符集(编码表)文件

  2.InputStreamReader:把字节流转为字符流的转换流构造方法:

    InputStreamReader(InputStream in) 和FileReader一样使用默认编码表

    InputStreamReader(InputStream in,String charsetName)可以指定编码表

 3.OutputStreamWriter:把字符流转为字节流的转换流构造方法:

    OutputStreamWriter(OutputStream out)使用默认的编码表

    OutputStreamWriter(OutputStream out,String charsetName)可以指定编码表

  4.注意:

    a.转换流本身不具备读写功能,需要依赖于输入流,输出流来实现对文件的读写操

      InputStreamReader:需要依赖FileInputStream输入流

      OutputStreamWriter:需要依赖FileOutputStream输出流

    b.在创建转换流时,必须给转换流指定的字符集(编码表)

      当不给转换流指定字符集时,转换流的作用没有太大意义了。此和转换流读用FileReaderFileWriter没       有区别


五、字符流缓冲区

  1.字符输入流缓冲区:BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符,数组和行的高   效读取

  构造方法:

    BufferedReader(Reader in):创建字符输入流缓冲区对象,默认大小为1024*8个字节

    BufferedReader(Reader in,int sz):创建字符输入流缓冲区对象,并指定缓冲区大小

    BufferedReader可以按照行来读取文件。方法:reader line()


  2.字符输出流缓冲区:BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符   串的高效写入

    构造方法:

      BufferedWriter(Writer out) 创建字符输出流缓冲区对象,使用默认大小

      BufferedWriter(Writer out,int sz)创建字符输出流缓冲区对象,并制定大小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值