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中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...
随机推荐
- vue-cli搭建vue项目环境
该篇文章是继https://www.cnblogs.com/qing-5/p/11321585.html来写 1.打开终端,输入指令"npm install --global vue-cli ...
- spring-security原理学习
spring security使用分类: 如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1.不用数据库,全部数据写在配置文件,这个也是官方文档里面的demo: ...
- 第二章 Django之python安装(1)
Python 安装 Django 由百分百的纯 Python 代码编写而成,因此必须在系统中安装 Python .Django 需要 2.3 或更高版本的 Python.如果使用的是 Linux 或 ...
- Djang drf:APIView源码分析
Django REST framework 简介 在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的. 开发REST AP ...
- keil 选项卡设置
*1.optimization : level2. *2. 2)硬件目标设置选项卡(Target),见图6所示. 图6 1:选择硬件目标设置选项卡 2:指定用于的晶振频率 3:在应用中可以选择实时操 ...
- 记录一下set的用法
set译为集合,是一个内部自动有序且不含重复元素的容器 有时出现需要去掉重复元素的情况 而且有可能因这些元素比较大或者类型不是int型而不能直接开散列表 在这种情况下就可以用set来保留元素本身而不考 ...
- Python基本语法变量
Python的语法和其它编程语言的语法有所不同,编写Paython程序之前需要对语法有所了解,才能编写规范的Python程序.本篇介绍Python标识符的同时,也讨论了Python变量的声明和赋值.通 ...
- 使用Tampermonkey,实现Gitlab禁用自我Merge的功能
Tampermonkey 简单入门资料:https://blog.csdn.net/gg_18826075157/article/details/78011162 Tampermonkey下载地址:T ...
- [ 转载 ] vue.js面试题一
转载自:https://www.cnblogs.com/aimeeblogs/p/9501490.html 如有侵权 联系删除 Vue.js面试题整理 一.什么是MVVM? MVVM是Model-Vi ...
- asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别 转载自:http://blog.csdn.net/luoyeyu1989/article/details/8275866
首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BLL(业务逻辑层).WEB层各司其职,意在职责分离. MVC是 Model-View-Controller,严格说这三个加起来 ...