Java中的BufferedReader与BufferedWriter简介与使用

Java中的BufferedReader与BufferedWriter简介与使用BufferedReader和BufferedWriter是带有默认缓冲区的字符输入输出流,其效率相较于没有缓冲区要高:   1.java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。…

大家好,又见面了,我是你们的朋友全栈君。

BufferedReader和BufferedWriter是带有默认缓冲区的字符输入输出流,其效率相较于没有缓冲区要高:

      1.java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

      2. 从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

    3. System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。

一 BufferedReader类

构造方法:BufferedReader br = new BufferReader(Reader in);

主要方法:int read();//读取单个字符。

            int read(char[] cbuf,int off,int len);//将字符读入到数组的某一部分。返回读取的字符数。达到尾部 ,返回-1。

                String readLine(); //读取一个文本行。

                void close(); //关闭该流。并释放与该流相关的所有资源。

使用示例如下:

FileInputStream inputstream = new FileInputStream(System.in); 
StringBuffer buffer = new StringBuffer(); 
String line; // 用来保存每行读取的内容 
BufferedReader bufferreader = new BufferedReader(new InputStreamReader(inputstream)); 
line = bufferreader.readLine(); // 读取第一行 
while (line != null) { // 如果 line 为空说明读完了 
	buffer.append(line); // 将读到的内容添加到 buffer 中 
	buffer.append("\n"); // 添加换行符 
	line = bufferreader.readLine(); // 读取下一行 
} 
inputstream.close(); //将读到 buffer 中的内容写出来 
System.out.print(buffer) ;

二 BufferedWriter类

构造方法:bufferedWriter bf = new bufferedWriter(Writer out );

主要方法:void write(char ch);//写入单个字符。

                void write(char []cbuf,int off,int len)//写入字符数据的某一部分。

                void write(String s,int off,int len)//写入字符串的某一部分。

                void newLine()//写入一个行分隔符。

                void flush();//刷新该流中的缓冲。将缓冲数据写到目的文件中去。

                void close();//关闭此流,再关闭前会先刷新他。

使用示例如下:

import java.io.BufferedWriter;  
import java.io.FileWriter;  
import java.io.IOException; 

public class BufferedWriterDemo { 
      public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("Buffered.txt"); 
            fw.write("Hello Hello");  
            fw.close();  
            BufferedWriter bfw= new BufferedWriter(fw); //使用字符流的缓冲区提高效率 
            bfw.write("hello hello fast"); //使用缓冲区的方法将数据写入到缓冲区中 
            bfw.newLine();  
            bfw.write("hello hello world");  
            bfw.flush(); //使用缓冲区中的方法,将数据刷新到目的地文件中去
            bfw.close();//关闭缓冲区,同时关闭fw流对象
      }  
}  

综合应用示例:

以下程序主要完成从一个文档复制内容到另一个文档。

import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  
  
public class DocTransfer {  
     public static void main(String[] args) throws IOException {  
          FileReader fr = new FileReader("D:\\doc1.txt");  
          FileWriter fw = new FileWriter("D:\\doc2.txt");  
          BufferedReader bfr = new BufferedReader(fr);  
          BufferedWriter bfw = new BufferedWriter(fw);    
          String line = null;  
          while((line = bfr.readLine()) != null){  
                bfw.write(line);//一行一行字的写  
                bfw.newLine();  
                bfw.flush();  
          } 
          /*int ch = 0; 
          while((ch = bfr.read())!=-1){ 
                bfw.write(ch); 
          }//一个字一个字的写*/  
          bfr.close();  
          bfw.close();  
    }  
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136484.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux中查询当前用户的命令总结

    Linux中查询当前用户的命令总结

    2022年3月12日
    60
  • vscode一键配置C/C++多个C及CPP文件编译与tasks.json和launch.json原理

    vscode一键配置C/C++多个C及CPP文件编译与tasks.json和launch.json原理vscode配置环境及配置原理搜了很多的教程,发现要么教程太老,给的配置信息里面有些参数都不能使用了,要么就是直接扔下自己的配置信息就没了,不知道咋来的,也不能拿过来直接用,让我这种小白无从下手,于是就摸索整理一下,帮助一下像我这样小白刚入手的小伙伴们。原理我觉得最重要的就是我们要明白各个配置文件是干嘛的,它是怎么被vscode使用的,明白这一点,那么自己就可以比较清晰参数该怎么改,应该改哪些参数,而不是拿着别人的配置文件,无从下手。配置文件基本的原理(只是原理,不是咋配置的):vscode使用的最

    2025年8月11日
    2
  • windows MySQL数据库备份bat脚本[通俗易懂]

    windows MySQL数据库备份bat脚本[通俗易懂]在windows服务器上,想要定时备份数据库数据,可采用windows的任务计划程序+数据库备份脚本组合。其中,MySQL数据库备份,起到关键作用是mysqldump。有关于mysqldump命令的用法,可以找MySQL的官方文档了解。以下主要描述脚本:echo设置MySql数据库的连接信息sethost=127.0.0.1setusername=rootsetpassword…

    2022年6月2日
    124
  • WPF 布局控件 之 WrapPanel[通俗易懂]

    WPF 布局控件 之 WrapPanel[通俗易懂]StatickPanel就是将子元素按照堆栈的形式一一排列,通过设置面板的Orientation属性设置了两种排列方式:横排(Horizontal默认的)和竖排(Vertical)。纵向的StatickPanel默认每个元素宽度与面板一样宽,反之横向亦然。如果包含的元素超过了面板空间,它只会截断多出的内容。元素的Margin属性用于使元素之间

    2022年7月23日
    9
  • 在Spring AOP切面中启用新事务

    在Spring AOP切面中启用新事务在工作中有一个在切面中需要记录一下操作日志的需求,而且要求这些操作日志要存入数据库,并且无论业务层有什么异常,日志照常记录,那就不能沿用业务层的事务,而是需要新启一个事务了。sping的声明式事务就是靠AOP来实现的,一般事务都在业务层中启用,那如果要在AOP的逻辑中启用一个新的事务要怎么做呢?比如下面的例子://定义一个切点,这里指com.lidehang.remote包下所有的类的方法…

    2022年7月27日
    3
  • 软件安装:mariadb安装教程

    软件安装:mariadb安装教程MySQL被Oracle收购后,出现了一个基于MySQL的开源数据库Mariadb。下面介绍一下Mariadb在windows7上的安装过程。下载时,提示要注册,可以选择不注册。真是跟MySQL的一样啊。安装教程连接:https://jingyan.baidu.com/article/f96699bb00ce67894e3c1b9a.html…

    2022年5月29日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号