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中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...
随机推荐
- gcc和g++编译器
.c文件,gcc当做c语言处理 .cpp文件,gcc和g++当做c++处理 .c文件和.cpp文件编译时,都是使用的gcc编译器 .cpp使用gcc链接,需要加入-lstdc++选项 举例 #incl ...
- xposed自定义参数
java反射机制允许在不显式调用类及类方法的前提下,实现创建类对象.调用类方法等一系列操作. 目标函数为TestArray,其参数为我们自定义的Person类的数组. public class tes ...
- LINUX学习笔记——LINUX下EXP命令全库备份数据库文件
LINUX下EXP命令全库备份数据库文件 1)建立备份目录,目录操作权限授权给Oracle用户 mkdir /backup --创建backup文件夹 cd / --进入cd语句 ls -l ...
- 09_Azkaban案例实践2_Command多job工作流flow
1.Command类型多job工作流flow 1.创建有依赖关系的多个job描述:第一个job:foo.job # foo.job type=command command=echo foo 2.第二 ...
- 什么是 java 序列化?(未完成)什么情况下需要序列化?(未完成)
什么是 java 序列化?(未完成)什么情况下需要序列化?(未完成)
- 【好好补题,因为没准题目还会再出第三遍!!】ACM字符串-组合数学(官方题解是数位DP来写)
ACM字符串 .长度不能超过n .字符串中仅包含大写字母 .生成的字符串必须包含字符串“ACM”,ACM字符串要求连在一块! ok,是不是很简单?现在告诉你n的值,你来告诉我这样的字符串有多少个 输入 ...
- python_json模块和pickle模块
json 优点:所有语言通用:缺点:只能序列化基本的数据类型list/dict/int... json格式中,字符串必须是双引号,字符都是小写. 序列化: import json v = [12,3, ...
- VirtualBox Linux虚拟机 网络设置 centos
VirtualBox网络设置成桥接 进去系统打开终端 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 用Vim编辑器打开配置文件,输入命令:vi /etc ...
- Python3发送webservice请求
Python3使用suds-jurko库来发送webservice接口请求 导入请求webservice接口需要用到的包 pip install suds-jurko 第一步:导入所需要的包 from ...
- 020_C语言常用函数
1. 清除数组,初始化数值 头文件:#include <memory.h>或 #include <string.h>函数原型:memset(void *s,int ch,siz ...