|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!
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=8192;
- //行支解符
- privateStringlineSeparator;
- //机关函数,传进“Writer对象”,默许缓冲区巨细是8k
- publicBufferedWriter(Writerout){
- this(out,defaultCharBufferSize);
- }
- //机关函数,传进“Writer对象”,指定缓冲区巨细是sz
- publicBufferedWriter(Writerout,intsz){
- super(out);
- if(sz<=0)
- thrownewIllegalArgumentException("Buffersize<=0");
- 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(a<b)returna;
- returnb;
- }
- //将字符数组cbuf写进到缓冲中,从cbuf的off地位入手下手写进,写进长度是len。
- //检察本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
- publicvoidwrite(charcbuf[],intoff,intlen)throwsIOException{
- synchronized(lock){
- ensureOpen();
- if((off<0)||(off>cbuf.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<t){
- intd=min(nChars-nextChar,t-b);
- System.arraycopy(cbuf,b,cb,nextChar,d);
- b+=d;
- nextChar+=d;
- if(nextChar>=nChars)
- flushBuffer();
- }
- }
- }
- //将字符串s写进到缓冲中,从s的off地位入手下手写进,写进长度是len。
- publicvoidwrite(Strings,intoff,intlen)throwsIOException{
- synchronized(lock){
- ensureOpen();
- intb=off,t=off+len;
- while(b<t){
- intd=min(nChars-nextChar,t-b);
- s.getChars(b,b+d,cb,nextChar);
- b+=d;
- nextChar+=d;
- if(nextChar>=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()函数时,它就会将缓冲区的数据写进到输入流中。
<p>
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。 |
|