Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 Re:thingking in java 里的bug。 [Re:develop8]
dzm521





发贴: 12
积分: 0
于 2006-06-09 16:52 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
PrintWriter构造器里面的第二个参数设置为true的意思是将缓冲区设置为自动刷新(automatic flushing),如果设置为false,println()便不会将缓冲区的内容刷新到System.out中去(注意:PrintWriter中的println()并没有直接将内容写入到System.out中去,而是将内容写入到缓冲区中直到缓冲区满才刷新,这样做是为了提高效率)。
你修改过的程序之所以能正确输出是因为使用了close(),此方法在关闭流之前会将缓冲区刷新,所以结果正确。
通常情况下在使用完某种流之后(确定程序将不再需要这种流),最好使用close方法将其关闭,以免引起不必要的麻烦,因为当我们创建某种流对象后操作系统此时也将会创建这种流对象所需要的系统资源,如端口,底层I/O的引用等。java垃圾回收器只负责清除在内存中用new创建的流对象,并不会释放操作系统创建的资源。
thinking in java 的作者在这里没有使用close()方法是因为:如果在此程序中使用close()的话,那么即使读者将构造参数改变为false后也看不到这两种设置的区别(因为close方法也有刷新缓冲区的功能,我们在实际中应该养成良好的习惯才好)。
如果你觉得上面的解释还不是很清楚(我的表达水平不高),你可以看看下面的例子:
此例是将在控制台输入的内容打印出来(按回车后),此过程将可以无止的循环操作直到你退出程序,可以将PrintWrite构造器的第2个参数改成false来观察程序运行的不同之出。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class TestSystem {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out, false);
String s;
while(((s = br.readLine()) != null) && args.length == 0){
out.println(s );
}
out.close();
}
}


PrintWriter构造器里面的第二个参数设置为true的意思是将缓冲区设置为自动刷新(automatic flushing),如果设置为false,println()便不会将缓冲区的内容刷新到

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class TestSystem {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out, true);
String s;
while(((s = br.readLine()) != null) && args.length == 0){
out.println(s );
}
out.close();
}
}


why edited on 2006-06-09 17:49


话题树型展开
人气 标题 作者 字数 发贴时间
5698 thinking in java 里的bug。 develop8 1729 2006-06-09 08:54
4335 Re:thingking in java 里的bug。 dzm521 1754 2006-06-09 16:52
4254 Re:thinking in java 里的bug。 develop8 14 2006-06-10 05:39
4216 Re:thinking in java 里的bug。 dzm521 138 2006-06-10 16:12
4156 Re:thinking in java 里的bug。 develop8 14 2006-06-15 07:14
4394 Re:thinking in java 里的bug。 virmin 123 2006-06-15 19:46
4566 Re:thinking in java 里的bug。 fighttodeath 99 2006-06-23 21:11

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923