了解下JAVA的java io进修(二十三) BufferedWriter(字符缓冲输入流)
没有那个大公司会傻了吧唧用.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;
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=(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年代初开发。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 是一种突破用户端机器环境和CPU 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
页:
[1]