Java 中的 BufferedWriter 介绍_动力节点Java学院整理
BufferedWriter介绍
BufferedWriter是缓冲字符输出流。它继承于Writer。
BufferedWriter的作用是为其他字符输出流添加一些缓冲功能。
BufferedWriter函数列表
//构造函数 BufferedWriter(Writerout) BufferedWriter(Writerout,intsz) voidclose()//关闭此流,但要先刷新它。 voidflush()//刷新该流的缓冲。 voidnewLine()//写入一个行分隔符。 voidwrite(char[]cbuf,intoff,intlen)//写入字符数组的某一部分。 voidwrite(intc)//写入单个字符。 voidwrite(Strings,intoff,intlen)//写入字符串的某一部分。
BufferedWriter源码分析(基于jdk1.7.40)
packagejava.io;
publicclassBufferedWriterextendsWriter{
//输出流对象
privateWriterout;
//保存“缓冲输出流”数据的字符数组
privatecharcb[];
//nChars是cb缓冲区中字符的总的个数
//nextChar是下一个要读取的字符在cb缓冲区中的位置
privateintnChars,nextChar;
//默认字符缓冲区大小
privatestaticintdefaultCharBufferSize=;
//行分割符
privateStringlineSeparator;
//构造函数,传入“Writer对象”,默认缓冲区大小是k
publicBufferedWriter(Writerout){
this(out,defaultCharBufferSize);
}
//构造函数,传入“Writer对象”,指定缓冲区大小是sz
publicBufferedWriter(Writerout,intsz){
super(out);
if(sz<=0)
thrownewIllegalArgumentException("Buffersize<=");
this.out=out;
cb=newchar[sz];
nChars=sz;
nextChar=0;
lineSeparator=java.security.AccessController.doPrivileged(
newsun.security.action.GetPropertyAction("line.separator"));
}
//确保“BufferedWriter”是打开状态
privatevoidensureOpen()throwsIOException{
if(out==null)
thrownewIOException("Streamclosed");
}
//对缓冲区执行flush()操作,将缓冲区的数据写入到Writer中
voidflushBuffer()throwsIOException{
synchronized(lock){
ensureOpen();
if(nextChar==0)
return;
out.write(cb,0,nextChar);
nextChar=0;
}
}
//将c写入到缓冲区中。先将c转换为char,然后将其写入到缓冲区。
publicvoidwrite(intc)throwsIOException{
synchronized(lock){
ensureOpen();
//若缓冲区满了,则清空缓冲,将缓冲数据写入到输出流中。
if(nextChar>=nChars)
flushBuffer();
cb[nextChar++]=(char)c;
}
}
//返回a,b中较小的数
privateintmin(inta,intb){
if(acbuf.length)||(len<0)||
((off+len)>cbuf.length)||((off+len)<0)){
thrownewIndexOutOfBoundsException();
}elseif(len==0){
return;
}
if(len>=nChars){
/*Iftherequestlengthexceedsthesizeoftheoutputbuffer,
flushthebufferandthenwritethedatadirectly.Inthis
waybufferedstreamswillcascadeharmlessly.*/
flushBuffer();
out.write(cbuf,off,len);
return;
}
intb=off,t=off+len;
while(b=nChars)
flushBuffer();
}
}
}
//将字符串s写入到缓冲中,从s的off位置开始写入,写入长度是len。
publicvoidwrite(Strings,intoff,intlen)throwsIOException{
synchronized(lock){
ensureOpen();
intb=off,t=off+len;
while(b=nChars)
flushBuffer();
}
}
}
//将换行符写入到缓冲中
publicvoidnewLine()throwsIOException{
write(lineSeparator);
}
//清空缓冲区数据
publicvoidflush()throwsIOException{
synchronized(lock){
flushBuffer();
out.flush();
}
}
publicvoidclose()throwsIOException{
synchronized(lock){
if(out==null){
return;
}
try{
flushBuffer();
}finally{
out.close();
out=null;
cb=null;
}
}
}
}
说明:BufferedWriter的源码非常简单,这里就BufferedWriter的思想进行简单说明:BufferedWriter通过字符数组来缓冲数据,当缓冲区满或者用户调用flush()函数时,它就会将缓冲区的数据写入到输出流中。
示例代码
关于BufferedWriter中API的详细用法,参考示例代码(BufferedWriterTest.java):
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.OutputStream;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.FileNotFoundException;
importjava.lang.SecurityException;
importjava.util.Scanner;
/**
*BufferedWriter测试程序
*
*
*/
publicclassBufferedWriterTest{
privatestaticfinalintLEN=5;
//对应英文字母“abcdefghijklmnopqrstuvwxyz”
//privatestaticfinalchar[]ArrayLetters="abcdefghijklmnopqrstuvwxyz";
privatestaticfinalchar[]ArrayLetters=newchar[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
publicstaticvoidmain(String[]args){
testBufferedWriter();
}
/**
*BufferedWriter的API测试函数
*/
privatestaticvoidtestBufferedWriter(){
//创建“文件输出流”对应的BufferedWriter
//它对应缓冲区的大小是16,即缓冲区的数据>=16时,会自动将缓冲区的内容写入到输出流。
try{
Filefile=newFile("bufferwriter.txt");
BufferedWriterout=
newBufferedWriter(
newFileWriter(file));
//将ArrayLetters数组的前10个字符写入到输出流中
out.write(ArrayLetters,0,10);
//将“换行符\n”写入到输出流中
out.write('\n');
out.flush();
//readUserInput();
out.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(SecurityExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*读取用户输入
*/
privatestaticvoidreadUserInput(){
System.out.println("pleaseinputatext:");
Scannerreader=newScanner(System.in);
//等待一个输入
Stringstr=reader.next();
System.out.printf("theinputis:%s\n",str);
}
}
运行结果:
生成文件“bufferwriter.txt”,文件的内容是“abcdefghij”。
以上所述是小编给大家介绍的Java中的BufferedWriter知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!