BufferedWriter中write与close函数使用
BufferedWriter 是一个缓冲字符输出流,可以将要输出的内容先缓冲到一个字符数组中,等字符数组满了才一次性写到输出流内,默认的字符数组长度为8192。使用BufferedWriter 时需要对write与close函数有一定了解,看如下代码:
StringBuffer content = new StringBuffer();
BufferedWriter bWriter = new BufferedWriter(new FileWriter(file, false)); content.setLength(0);
bWriter.write(content.toString());
bWriter.close();
问题:
1. BufferedWriter write函数写入空字符串时会怎么样?
2. BufferedWriter close函数能否关闭FileWriter的文件流 ?
源代码(jdk1.6)解读:
public void write(String paramString) throws IOException {
    write(paramString, 0, paramString.length());
}
public void write(String arg0, int arg1, int arg2) throws IOException {
    Object arg3 = this.lock;
    synchronized (this.lock) {
      this.ensureOpen();
      int arg4 = arg1;
      int arg5 = arg1 + arg2;
  
     while (arg4 < arg5) {
         int arg6 = this.min(this.nChars - this.nextChar, arg5 - arg4);
         arg0.getChars(arg4, arg4 + arg6, this.cb, this.nextChar);
         arg4 += arg6;
         this.nextChar += arg6;
         if (this.nextChar >= this.nChars) {
            this.flushBuffer();
         }
     }
   }
}
答案1:content.setLength(0) 将字符串content 的长度设置为0,content不为null,所以content.toString()为'',一个空字符串。bWriter.write写入null会报错,但是写入''时不会报错,从源代码中可以看到当写入长度为0的字符串时,arg4==arg5,循环不会执行,也不会报错,能够正常处理。
public void close() throws IOException {
    Object arg0 = this.lock;
    synchronized (this.lock) {
      if (this.out != null) {
          try {
               Writer arg1 = this.out;
               Throwable arg2 = null;
               try {
                    this.flushBuffer();
               } catch (Throwable arg21) {
                    arg2 = arg21;
                    throw arg21;
               } finally {
                    if (arg1 != null) {
                        if (arg2 != null) {
                            try {
                                 arg1.close();
                            } catch (Throwable arg20) {
                                 arg2.addSuppressed(arg20);
                            }
                        } else {
                            arg1.close();
                           }
                    }
                 }
            } finally {
               this.out = null;
               this.cb = null;
               }
            }
        }
} 
答案2:当BufferedWriter 关闭时,bWriter.close函数能够关闭FileWriter的文件流。从源代码中可以看出,bWriter.close()在close时会调用关闭FileWriter文件输出流, 其中,this.out 就是FileWriter对象,是被关闭了的。
BufferedWriter中write与close函数使用的更多相关文章
- SQL中Round(),Floor(),Ceiling()函数的浅析
		项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ... 
- avascript中的this与函数讲解
		徐某某 一个半路出家的野生程序员 javascript中的this与函数讲解 前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大 ... 
- PHP中有关正则表达式的函数集锦
		之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ... 
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
		用户定义函数(UDF)分类 SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ... 
- mysql中bit_count和bit_or函数的含义
		翻阅mysql手册时,看到有个示例使用了bit_or方法来去除重复的数据,一开始没看明白,后来看明白之后感觉非常巧妙.示例要实现的功能就是计算每月有几天有访问,先把示例摘录在这里. 1 2 3 4 5 ... 
- C#中的日期处理函数
		C#中的日期处理函数 //2013年4月24日 this.TextBox6.Text = System.DateTime.Now.ToString("D"); //2013-4-2 ... 
- 在Excel中使用频率最高的函数的功能和使用方法
		在Excel中使用频率最高的函数的功能和使用方法,按字母排序: 1.ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值. 使用格式:ABS(number) 参数说明:number代表需要求绝 ... 
- Loadrunner中web_find和web_reg_find函数的使用与区别
		总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find():这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一.web_find( ... 
- python 中的sort 和java中的Collections.sort()函数的使用
		x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ... 
随机推荐
- ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)
			使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ... 
- windows找不到头文件的问题
			windows系统中,设置好了环境变量,就可以在cmd下直接执行文件,但是 特别是在c语言或者c++程序中,include头文件的问题,如果找不到,就考虑是不是文件放错地方了. windows上编译c ... 
- vue——store全局存储
			业务场景:刷新页面时,首次拉取所有配置,存储到store状态管理用于全局调用: import Vue from 'vue' import Vuex from 'vuex' import userInf ... 
- moment——日期格式化常用示例
			<template> <div id="app" style="text-align: center;"> <h1>{{ m ... 
- mongodb备份每一天的数据
			需求:把mongodb里面存储6个月的数据备份到本地,一天天的来备份,方便对备份管理.然后mongo保留一周的数据(优化查询速度,可以用mongo的ttl来实现,但是我的业务场景不太适合用ttl索引) ... 
- javascript冒泡事件详解
			冒泡事件: 定义:当多个Dom元素互相嵌套的时候,一个元素触发了某个事件(例如Click事件),那么嵌套此事件的所有元素都会被触发一次Click事件,注意:只会触发他的直系亲属元素,而与其自己,父级, ... 
- Flutter——Stack组件(层叠组件)、Align组件、Positioned组件
			Stack 表示堆的意思,我们可以用 Stack 或者 Stack 结合 Align 或者 Stack 结合 Positiond 来实现页面的定位布局. Stack组件 常用于两个子元素. Stack ... 
- java中的管程
			前言  并发编程这个技术领域已经发展了半个世纪了,相关的理论和技术纷繁复杂.那有没有一种核心技术可以很方便地解决我们的并发问题呢?这个问题如果让我选择,我一定会选择管程技术.Java 语言在 1.5 ... 
- Django中使用xadmin作为后台管理页面
			xadmin后台管理 安装:luffy虚拟环境下 # >: pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 ... 
- 07 Windows编程——窗口滚动条
			两个函数:GetScrolnfo和SetScrollnfo一个结构:SCROLLINFO两个消息:WM_CREATE和WM_SIZE 滚动条结构体 typedef struct tagSCROLLIN ... 
