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知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!