首页 > 编程语言 > 详细

Java IO6:字符流进阶及BufferedWriter、BufferedReader

时间:2019-03-08 18:44:05      阅读:156      评论:0      收藏:0      [点我收藏+]

字符流和字节流的区别

  拿一下上一篇文章的例子:

 1 public class Test {
 2     public static void main(String[] args) throws IOException {
 3         File file = new File("D:" + File.separator + "readerAndWriter.txt");
 4         //创建字符输出流
 5         Writer writer = new FileWriter(file);
 6         String content = "hello World 中国 center 执行";
 7         //将内容写入文件
 8         writer.write(content);
 9         //关闭输出流
10 //        writer.close();
11 
12         //创建字符输入流
13         Reader reader = new FileReader(file);
14         char[] chars = new char[1024];
15         //将文件的内容读取到chars数组中,并返回读取到的字符个数
16         int characterNumbers = reader.read(chars);
17         if(characterNumbers == -1){
18             System.out.println("文件中无内容");
19         }else{
20             //输出读取到的内容
21             System.out.println(new String(chars));
22         }
23         reader.close();
24     }
25 }

  注意第十行,将writer.close()方法注释之后,此时将无法将字符串写入文件

技术分享图片

  控制台输出:

技术分享图片

  说明一下原因:

  字符流和字节流非常相似,但也有区别,从网上找了一张图:

技术分享图片

  从图上看,字符流和字节流最大的区别在于,字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流操作时使用了缓冲区,通过缓冲区再操作文件。这也解释了上面程序的那个问题,为什么不对资源进行close()就无法写入文件的原因。因为在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果没有关闭,缓冲区中的内容是无法输出的

  什么是缓冲区?简单理解,缓冲区就是一块特殊的内存区域。为什么要使用缓冲区?因为如果一个程序频繁操作一个资源(文件或数据库),则性能会很低,为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域读取数据即可,因为读取内存的速度要快于读取磁盘中文件内容的速度。

  在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区。

  如果不想在关闭时再输出字符流的内容也行,使用Writer的flush()方法就可以了。

 

https://blog.csdn.net/Bazingaea/article/details/51277344

Java IO6:字符流进阶及BufferedWriter、BufferedReader

原文:https://www.cnblogs.com/zfyang2429/p/10497380.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!