zoukankan      html  css  js  c++  java
  • (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter

    字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字

    字符流

    字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符

    字符流:字符流会把读到的二进制的数据进行对应的编码解码工作。 字符流 = 字节流+编码(解码)

    输入字符流
    Reader 输入字符流的基类 抽象类

    |——FileReader 读取文件的输入字符流

    FIleReader的用法:

    1、找到目标文件

    2、建立数据的输入通道

    3、读取数据

    4、关闭资源

    FileWriter的使用注意事项

    1FileWriter写数据的时候,FileWriter内部维护了一个1024个字节的数组,写数据的时候,会先写入到它内部维护的字符数组,如果需要把数据真正写到硬盘上,需要调用flush方法

    或者close方法或者内部数组存满时,才会把缓冲数组中的内容写入到硬盘。

    2、使用FileWriter的时候,如果目标文件不错在会自动创建文件,

    3、如果目标文件已存在,默认情况会先清空文件中的数据,在写入数据,如果需要在原来的基础上追加数据。需要舒勇构造函数

    new FileWriter(file, true)

    使用字符流拷贝图片会导致图片数据丢失,图片变小,而无法显示。

    FileReader默认的是gbk编码,gbk是两个字节共可表示65536个字符,但是并非一共这么多的码子,有些是空的无法表示。

    每当reader从图片中读取到的数据会先到码表中找映射到的字符,但是有些是没有字符映射的,那么会返回一个未知字符对应的

    数字,而为之字符占一个字节。这样就导致了数据的丢失。

    使用字符流拷贝文本文件:

     1 public static void copyText() throws IOException 
     2     {
     3         //找到目标文件
     4         File inFile = new File("E:\ebook\海边的卡夫卡.txt");
     5         File outFile = new File("D:\海边的卡夫卡副本.txt");
     6         //建立数据通道
     7         FileReader fileReader = new FileReader(inFile);
     8         FileWriter fileWriter = new FileWriter(outFile);
     9         //建立缓冲字符数组
    10         int length = 0;
    11         int wordCount = 0;
    12         char[] buf = new char[1024];
    13         while((length = fileReader.read(buf))!=-1)
    14         {
    15             wordCount += length;
    16             fileWriter.write(buf, 0, length);
    17         }
    18         fileWriter.close();
    19         fileReader.close();
    20         System.out.println("wordCount = "+wordCount);
    21     }

    何时使用字符流,何时使用字节流?依据是什么?

    使用字符流的应用场景?

    如果是读写字符数据的时候,比如你看到到的abcd日月水火等

    字节流的应用场景?

    如果读写的数据都不需要转换成字符的时候比如声音文字视频,则使用字节流。

    输入字符流

    Reader 输入字符流的基类 抽象类

    |——FileReader 读取文件的字符流

    |——BufferedReder 缓冲输入字符流,为了提高侮辱数据的效率和扩张了FileReader的功能。

    | 该类内部也是维护了一个字符数组。多了一个readLine()的方法

    BufferedReader缓冲输入字符流的使用步骤

    1、找到目标文件

    2、建立数据的输入通道

    3、读取数据

    4、关闭资源

    输出字符流

    Writer 所有输出流的基类 抽象类

    |——FileWriter 向文件输出字符数据的输出字符流

    |——BufferWriter缓冲输出字符流 缓冲输出字符流主要作用提高FileWriter的写数据的效率和团战FielWriter的功能

    BufferWiter的使用步骤

    1.找到目标文件

    2、建立数据输出通道

    3、建立缓冲输出流

    4、写出数据

    5、别忘了使用flush或者close

    注意:BufferedWriter类的设计稍微有一点失败,这个类和FileWriter类的功能完全一样,不同之处在于,BufferedWriter

    维护的内部缓冲数组更大一些,8kBFileWriter类的内部缓冲数组是1kB,此外,BufferedWriter内部缓冲数组的大小可以使用

    构造函数来制定,neLine()写入一个分分行符,就这么多

  • 相关阅读:
    C# 设计模式-状态模式
    C# 设计模式-备忘录模式
    C# 设计模式-命令模式
    本地易优安装总结
    视频自动添加字幕
    百度商桥安装
    百度统计
    模板
    百度地图API
    栅格布局的理解
  • 原文地址:https://www.cnblogs.com/OliverZhang/p/6025436.html
Copyright © 2011-2022 走看看