返回信息流今天在online judge上用java做道题,开始是用System.out.print();这种方式输出,超时了,后来采用:
rintWriter out = new PrintWriter(System.out);
out.print();这种方式输出,就没超时。想问下这两者有什么区别?
这是一条镜像帖。来源:北邮人论坛 / java / #19942同步于 2011/9/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【请教】是不是用System.out.print();输出效率较低
jkfbrant
2011/9/3镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
PrintStream是OutputStream的子类,PrintWriter是Writer的子类,两者处于对等的位置上,所以它们的API是非常相似的。PrintWriter实现了PritnStream的所有print方法。对于PrintStream,所有println方法都在内部调用相应的print方法,比如println(char x)的方法体就是调用print(x);再写入一个平台相关的换行符。PrintStream构建时会在内部new一个BufferedWriter,所有print方法都在内部调用这个Writer的write方法(write(String)或write(char[]))——对于print(char[]),直接调用write(char[]);对于其他的print方法,先用String.valueOf获得参数的字符串表示,然后调用write(String)。
对于PrintWriter,所有println方法也都在内部调用print方法,print方法调用write方法。传入OutputStream时,PrintWriter会在内部构造一个BufferedWriter;而传入Writer时,PrintStream内部直接使用该Writer,此时PrintWriter是否进行了缓冲全看该Writer。
所以,对于使用print系列方法的场合,二者没什么区别。
但是,PrintStream是字节流,它有处理raw byte的方法,write(int)和write(byte[],int,int);PrintWriter是字符流,它没有处理raw byte的方法。PrintStream和PrintWriter的auto flushing机制有点不同,前者在输出byte数组、调用println方法、输出换行符或者byte值10(即\n)时自动调用flush方法,后者仅在调用println方法时发生auto flushing。