黑马程序员技术交流社区

标题: IO问题,求解答 [打印本页]

作者: 袁梦希    时间: 2013-3-30 20:19
标题: IO问题,求解答
本帖最后由 袁梦希 于 2013-3-31 01:56 编辑

PrintWriter实现了PrintStream的所有的print方法,
还有关于自动刷新的问题,他们到底有什么区别?
作者: 郭沐昌    时间: 2013-3-30 20:21
我认为
PrintStream 为其他输出流添加了功能使它们能够方便地打印各种数据值表示形式
在需要写入字符时在PrintWriter
作者: 陈圳    时间: 2013-3-30 20:27
一个是字节打印流,一个是字符的,你可以联想到字流/字符输入输出流,java不像其他语言,IO流的装饰类太多,都是有特定功能的.
作者: 袁梦希    时间: 2013-3-30 20:32
陈圳 发表于 2013-3-30 20:27
一个是字节打印流,一个是字符的,你可以联想到字流/字符输入输出流,java不像其他语言,IO流的装饰类太多,都是 ...

我想知道他刷新的问题,最好说的全面一点
作者: 李红志    时间: 2013-3-31 01:02
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。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2