zoukankan      html  css  js  c++  java
  • java —— 字符流

    字符流的继承类图

      

      主要字符流,它们有:

        Reader/Writer:字符流的基类,它们是抽象类。

        InputStreamReader/OutputStreamWriter:适配器类,输入是InputStream,输出是OutputStream,将字节流转换为字符流。

        FileReader/FileWriter:输入源和输出目标是文件的字符流。

        CharArrayReader/CharArrayWriter: 输入源和输出目标是char数组的字符流。

        StringReader/StringWriter:输入源和输出目标是String的字符流。

        BufferedReader/BufferedWriter:装饰类,对输入输出流提供缓冲,以及按行读写功能。

        PrintWriter:装饰类,可将基本类型和对象转换为其字符串形式输出的类。

    一、Reader/Writer

    二、InputStreamReader/OutputStreamWriter   转换流

      可以使用指定的编码规范并基于字节流生成对应的字符流

      OutputStreamWriter的主要构造方法为:

        public OutputStreamWriter(OutputStream out)

        public OutputStreamWriter(OutputStream out, String charsetName)

        public OutputStreamWriter(OutputStream out, Charset cs)

      InputStreamReader的主要构造方法为:

        public InputStreamReader(InputStream in)

        public InputStreamReader(InputStream in, String charsetName)

        public InputStreamReader(InputStream in, Charset cs)

      重要的参数是编码类型,可以通过名字charsetName或Charset对象传入,默认编码 Charset.defaultCharset() 得到 GBK

     二、FileReader/FileWriter  字符流  

       是 InputStreamReader/OutputStreamWriter 的子类。

         FileReader 主要构造方法有:

        public FileReader(File file) throws FileNotFoundException

        public FileReader(String fileName) throws FileNotFoundException

      FileWriter 主要构造方法有:

        public FileWriter(File file) throws IOException

        public FileWriter(File file, boolean append) throws IOException

        public FileWriter(String fileName) throws IOException

        public FileWriter(String fileName, boolean append) throws IOException

      append参数指定是追加(true)还是覆盖 (false),默认覆盖

      备注:FileReader/FileWriter不能指定编码类型,只能使用默认编码,如果需要指定编码类型,可以使用InputStreamReader/OutputStreamWriter。

    三、CharArrayReader/CharArrayWriter

      与字节流 ByteArrayInputStream/ByteArrayOutputStream 是类似的,将字节(byte)数组变为字符(char)数组

    四、StringReader/StringWriter

      StringReader/StringWriter与CharArrayReader/CharArrayWriter类似,只是输入源为String,输出目标为StringBuffer,而且,String/StringBuffer内部是由char数组组成的,所以它们本质上是一样的。
      之所以要将char数组/String与Reader/Writer进行转换也是为了能够方便的参与Reader/Writer构成的协作体系,复用代码。

    五、BufferedReader/BufferedWriter

      BufferedReader/BufferedWriter是装饰类,提供缓冲,以及按行读写功能。BufferedWriter的构造方法有:

        public BufferedWriter(Writer out)

        public BufferedWriter(Writer out, int sz)

      参数sz是缓冲大小,如果没有提供,默认为8192。它有如下方法,可以输出平台特定的换行符

        public void newLine() throws IOException

     

      BufferedReader的构造方法有:

        public BufferedReader(Reader in)

        public BufferedReader(Reader in, int sz)

    参数sz是缓冲大小,如果没有提供,默认为8192。它有如下方法,可以读入一行:

        public String readLine() throws IOException

     备注:

      字符' '或' '或' '被视为换行符,readLine返回一行内容,但不会包含换行符,当读到流结尾时,返回null。

      FileReader/FileWriter是没有缓冲的,也不能按行读写,所以,一般应该在它们的外面包上对应的缓冲类。

      使用字符缓冲流读取一行文件

    1         BufferedReader read = new BufferedReader(new FileReader("D:\mys\utf-8.txt"));
    2         String str = read.readLine();
    3         System.out.println(str);
    4         read.close();

      输出结果的这一行文字乱码了,这是因为 该文本文件是用 utf-8 的格式保存的,而 eclipse 默认的编码格式是 GBK 。

       FileReader/FileWriter不能指定编码类型,只能使用默认编码,InputStreamReader/OutputStreamWriter 可以指定编码类型

       故代码做如下更改

    1 BufferedReader read = new BufferedReader(new InputStreamReader(
    new FileInputStream("D:\mys\utf-8.txt"), "UTF-8")); 2 String str = read.readLine(); 3 System.out.println(str); 4 read.close();

      此时,输出结果正常无乱码产生。

      字符缓冲流向磁盘写入文件

      情况一:由于没有关闭输出流,磁盘文件未成功写入数据。执行 bw.close() 后数据写入

    1 BufferedWriter bw = new BufferedWriter(new FileWriter("D:\mys\sss.txt"));
    2         String str = "好朋友呵请问你西游何时回还?可怕的岩山栈道实在难以登攀!";
    3         bw.write(str);

      情况二:数据正常写入到磁盘

    BufferedWriter bw = new BufferedWriter(new FileWriter("D:\mys\sss.txt"));
            String str = "好朋友呵请问你西游何时回还?可怕的岩山栈道实在难以登攀!";
            bw.write(str);
            bw.flush();
           //bw.close();

        这是因为,对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出

    文本文件和字符流 / 计算机程序的思维逻辑

  • 相关阅读:
    世界企业家:创业者需知的8条创业逻辑
    比尔·盖茨的“机会”观——不追求机会,才会有机会
    我爱思佳(帮别人名字作诗)
    唐艺铭(帮别人名字作诗)
    我爱思佳(帮别人名字再作诗)
    优秀是一种习惯:智者五句话足以改变你的人生
    别了,我的情人
    李丽萍(帮别人名字作诗)
    Know GCS AND GES structure size in shared pool
    测试Exadata单个cell失败
  • 原文地址:https://www.cnblogs.com/SacredOdysseyHD/p/8476055.html
Copyright © 2011-2022 走看看