zoukankan      html  css  js  c++  java
  • 详解 字符缓冲流

    (请观看本人博文——《详解 字符流》

    字符缓冲流 和 字节缓冲流(高效字节流)运用了同样的思想 —— 缓冲区思想
    其实这种思想涉及到了Java的一种设计模式 —— 装饰模式
    (对于此知识点,在此篇博文中不做讲解,将在本人后续博文中进行讲解)



    字符缓冲流:

    (高效字符转换流)

    这两个类是利用缓冲区的思想,封装起来的BufferedWriter和BufferedReader

    对于这两个类,本人要强调一下:
    字符缓冲流特殊的API
    对于要对文本文件内容一行一行进行处理的情况 最为适用。


    那么,首先,本人来介绍下 输出流(BufferedWriter类):

    BufferedWriter类:

    首先,本人来展示下这个类的构造方法:

    • BufferedWriter(Writer out)
      创建一个使用默认大小(8192字节)的输出缓冲区的缓冲字符输出流
    • BufferedWriter(Writer out, int sz)
      创建一个使用给定大小的输出缓冲区的新缓冲字符输出流

    现在,本人来展示下这个类的常用API

    • void write(char[] cbuf, int off, int len)
      写入字符数组的某一部分
    • void write(int c)
      写入单个字符
    • void write(String s, int off, int len)
      写入字符串的某一部分
    • void newLine()
      写入一个行分隔符
    • void flush()
      刷新该流的缓冲

    现在,本人来展示下部分API的用法:

    题:现在本人通过控制台向文件中录入粉丝姓名
    要求:从控制台输入粉丝姓名(输入“exit”退出录入),录入后将之前所录入的粉丝姓名,逐行录入文件中。

    package edu.youzg.about_io.about_file.core;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.Scanner;
    
    public class Test {
    
        public static void main(String[] args) throws IOException {
            ArrayList<String> list = new ArrayList<>();
            Scanner in = new Scanner(System.in);
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("fanName.txt")));
    
            System.out.println("-----------------------欢迎使用 粉丝姓名录入系统-----------------------");
            System.out.println("请输入粉丝姓名:");
    
            //从控制台向集合中录入粉丝姓名
            String fanName = null;
            while (!in.hasNext("exit")) {
                fanName = in.next();
                list.add(fanName);
                System.out.println("录入成功!请输入下一位粉丝姓名:(输入exit退出粉丝姓名录入系统)");
            }
    
            //读取一行数据,往集合里面添加一个
            String line = null;
            for (String s : list) {
                writer.write(s);
                writer.newLine();
                writer.flush();
            }
    
            //释放资源
            in.close();
            writer.close();
        }
    
    }
    

    现在,本人来展示下运行结果以及生成的文件的内容;
    在这里插入图片描述
    那么,可以看到,本人的代码完成了要求!


    现在,本人来介绍下 输入流(BufferedReader类):

    BufferedReader类:

    首先,本人来展示下这个类的构造方法:

    • BufferedReader(Reader in)
      创建一个使用默认大小(8192字节)的输入缓冲区的缓冲字符输入流
    • BufferedReader(Reader in, int sz)
      创建一个使用指定大小的输入缓冲区的缓冲字符输入流

    现在,本人来展示下这个类的常用API

    • void mark(int readAheadLimit)
      标记流中的当前位置。
    • boolean markSupported()
      判断此流是否支持 mark() 操作(它一定支持)。
    • int read()
      读取单个字符。
    • int read(char[] cbuf, int off, int len)
      将字符读入数组的某一部分。
    • String readLine()
      读取一个文本行。
    • boolean ready()
      判断此流是否已准备好被读取。
    • void reset()
      将流重置到最新的标记。
    • long skip(long n)
      跳过字符。

    那么,同样地,本人来展示下部分API的用法:

    题:现在本人要随机从粉丝名称文件中抽取一个粉丝赠送礼品
    要求:读取粉丝名称文件,然后从中随机输出一个粉丝名

    package edu.youzg.about_io.about_file.core;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Random;
    
    public class Test {
    
        public static void main(String[] args) throws IOException {
            ArrayList<String> list = new ArrayList<>();
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("fanName.txt")));
            //读取一行数据,往集合里面添加一个
            String line=null;
            while ((line=reader.readLine())!=null){
                list.add(line);
            }
            //随机从集合里面抽取一个粉丝
            Random random = new Random();
            int index = random.nextInt(list.size());
            String s = list.get(index);
            System.out.println(s);
    
            //释放资源
            reader.close();
        }
    
    }
    

    本人先来展示下源文件内容:
    在这里插入图片描述
    现在,本人来展示下运行结果:
    在这里插入图片描述
    可以看到,从粉丝信息文件中随机输出了一个粉丝的姓名


    那么,现在,本人来展示下利用缓冲流来复制文件的操作:

    package edu.youzg.about_io.about_file.core;
    
    import java.io.*;
    
    public class Test {
    
        public static void main(String[] args) throws IOException {
            BufferedReader bfr = new BufferedReader(new FileReader("fanName.txt"));
            BufferedWriter bfw = new BufferedWriter(new FileWriter("copyView.txt"));
            //读取一行,写出一行来复制
            String line = null;
            while ((line = bfr.readLine())!= null){
                bfw.write(line);
                bfw.newLine(); //写出一个换行符,具有平台兼容性
                bfw.flush();	//清空缓存区
            }
    		
    		//释放资源
            bfr.close();
            bfw.close();
        }
    
    }
    

    现在,本人来展示下运行后生成的文本文件的内容:
    在这里插入图片描述
    可以看到,本人的代码完成了文件的复制功能!

    (本人《详解 字节流 与 字符流》博文链接:https:////www.cnblogs.com/codderYouzg/p/12418532.html
    (本人 I/O流总集篇 博文链接:https:////www.cnblogs.com/codderYouzg/p/12418404.html

  • 相关阅读:
    SSH 免密登录配置
    Hadoop 2.7.2 集群安装配置
    将oracle数据库中数据写入excel文件
    PLSQL提交请求集
    oracle会计工作总结,EBS 创建会计科目 小结
    将oracle数据库中数据写入excel文件
    如何成为一名优秀的工程师(听讲座有感) Winema
    基于W5300的嵌入式以太网接口设计 Winema
    Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换
    VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools.
  • 原文地址:https://www.cnblogs.com/codderYouzg/p/12418600.html
Copyright © 2011-2022 走看看