仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 515|回复: 8
打印 上一主题 下一主题

[学习教程] 了解下JAVA的java io进修(二十三) BufferedWriter(字符缓冲输入流)

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:00:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!
BufferedWriter先容
BufferedWriter是缓冲字符输入流。它承继于Writer。
BufferedWriter的感化是为其他字符输入流增加一些缓冲功效。
BufferedWriter函数列表
  1. //机关函数
  2. BufferedWriter(Writerout)
  3. BufferedWriter(Writerout,intsz)
  4. voidclose()//封闭此流,但要先革新它。
  5. voidflush()//革新该流的缓冲。
  6. voidnewLine()//写进一个行分开符。
  7. voidwrite(char[]cbuf,intoff,intlen)//写进字符数组的某一部分。
  8. voidwrite(intc)//写进单个字符。
  9. voidwrite(Strings,intoff,intlen)//写进字符串的某一部分。
复制代码
BufferedWriter源码剖析(基于jdk1.7.40)
  1. packagejava.io;
  2. publicclassBufferedWriterextendsWriter{
  3. //输入流对象
  4. privateWriterout;
  5. //保留“缓冲输入流”数据的字符数组
  6. privatecharcb[];
  7. //nChars是cb缓冲区中字符的总的个数
  8. //nextChar是下一个要读取的字符在cb缓冲区中的地位
  9. privateintnChars,nextChar;
  10. //默许字符缓冲区巨细
  11. privatestaticintdefaultCharBufferSize=8192;
  12. //行支解符
  13. privateStringlineSeparator;
  14. //机关函数,传进“Writer对象”,默许缓冲区巨细是8k
  15. publicBufferedWriter(Writerout){
  16. this(out,defaultCharBufferSize);
  17. }
  18. //机关函数,传进“Writer对象”,指定缓冲区巨细是sz
  19. publicBufferedWriter(Writerout,intsz){
  20. super(out);
  21. if(sz<=0)
  22. thrownewIllegalArgumentException("Buffersize<=0");
  23. this.out=out;
  24. cb=newchar[sz];
  25. nChars=sz;
  26. nextChar=0;
  27. lineSeparator=java.security.AccessController.doPrivileged(
  28. newsun.security.action.GetPropertyAction("line.separator"));
  29. }
  30. //确保“BufferedWriter”是翻开形态
  31. privatevoidensureOpen()throwsIOException{
  32. if(out==null)
  33. thrownewIOException("Streamclosed");
  34. }
  35. //对缓冲区实行flush()操纵,将缓冲区的数据写进到Writer中
  36. voidflushBuffer()throwsIOException{
  37. synchronized(lock){
  38. ensureOpen();
  39. if(nextChar==0)
  40. return;
  41. out.write(cb,0,nextChar);
  42. nextChar=0;
  43. }
  44. }
  45. //将c写进到缓冲区中。先将c转换为char,然后将其写进到缓冲区。
  46. publicvoidwrite(intc)throwsIOException{
  47. synchronized(lock){
  48. ensureOpen();
  49. //若缓冲区满了,则清空缓冲,将缓冲数据写进到输入流中。
  50. if(nextChar>=nChars)
  51. flushBuffer();
  52. cb[nextChar++]=(char)c;
  53. }
  54. }
  55. //前往a,b中较小的数
  56. privateintmin(inta,intb){
  57. if(a<b)returna;
  58. returnb;
  59. }
  60. //将字符数组cbuf写进到缓冲中,从cbuf的off地位入手下手写进,写进长度是len。
  61.         //检察本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
  62. publicvoidwrite(charcbuf[],intoff,intlen)throwsIOException{
  63. synchronized(lock){
  64. ensureOpen();
  65. if((off<0)||(off>cbuf.length)||(len<0)||
  66. ((off+len)>cbuf.length)||((off+len)<0)){
  67. thrownewIndexOutOfBoundsException();
  68. }elseif(len==0){
  69. return;
  70. }
  71. if(len>=nChars){
  72. /*Iftherequestlengthexceedsthesizeoftheoutputbuffer,
  73. flushthebufferandthenwritethedatadirectly.Inthis
  74. waybufferedstreamswillcascadeharmlessly.*/
  75. flushBuffer();
  76. out.write(cbuf,off,len);
  77. return;
  78. }
  79. intb=off,t=off+len;
  80. while(b<t){
  81. intd=min(nChars-nextChar,t-b);
  82. System.arraycopy(cbuf,b,cb,nextChar,d);
  83. b+=d;
  84. nextChar+=d;
  85. if(nextChar>=nChars)
  86. flushBuffer();
  87. }
  88. }
  89. }
  90. //将字符串s写进到缓冲中,从s的off地位入手下手写进,写进长度是len。
  91. publicvoidwrite(Strings,intoff,intlen)throwsIOException{
  92. synchronized(lock){
  93. ensureOpen();
  94. intb=off,t=off+len;
  95. while(b<t){
  96. intd=min(nChars-nextChar,t-b);
  97. s.getChars(b,b+d,cb,nextChar);
  98. b+=d;
  99. nextChar+=d;
  100. if(nextChar>=nChars)
  101. flushBuffer();
  102. }
  103. }
  104. }
  105. //将换行符写进到缓冲中
  106. publicvoidnewLine()throwsIOException{
  107. write(lineSeparator);
  108. }
  109. //清空缓冲区数据
  110. publicvoidflush()throwsIOException{
  111. synchronized(lock){
  112. flushBuffer();
  113. out.flush();
  114. }
  115. }
  116. publicvoidclose()throwsIOException{
  117. synchronized(lock){
  118. if(out==null){
  119. return;
  120. }
  121. try{
  122. flushBuffer();
  123. }finally{
  124. out.close();
  125. out=null;
  126. cb=null;
  127. }
  128. }
  129. }
  130. }
复制代码
申明:BufferedWriter的源码十分复杂,这里就BufferedWriter的头脑举行复杂申明:BufferedWriter经由过程字符数组来缓冲数据,当缓冲区满大概用户挪用flush()函数时,它就会将缓冲区的数据写进到输入流中。
<p>
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-20 12:33:54 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
不帅 该用户已被删除
板凳
发表于 2015-1-25 23:23:54 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-4 10:01:30 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
海妖 该用户已被删除
5#
发表于 2015-2-9 22:01:47 | 只看该作者
是一种突破用户端机器环境和CPU
透明 该用户已被删除
6#
发表于 2015-2-27 22:53:06 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
深爱那片海 该用户已被删除
7#
发表于 2015-3-9 15:05:56 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
小女巫 该用户已被删除
8#
发表于 2015-3-17 00:06:40 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
简单生活 该用户已被删除
9#
发表于 2015-3-23 07:30:50 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 19:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表