黑马程序员技术交流社区

标题: PrintStream与PrintWriter的问题 [打印本页]

作者: 张建峰    时间: 2012-8-20 23:51
标题: PrintStream与PrintWriter的问题
最近在IO流中的Print比较迷茫:PrintStream与PrintWriter的用法到底是怎么用的?
两者都属于输出流吗?
两者都有print方法,有什么区别呢?
我们一般写的println调用的是谁的?如果是printStream的,那么一直都是它的吗
哪位大神能用简单易懂的文字给说明下区别和用法啊
作者: 刘玉    时间: 2012-8-21 00:00
PrintStream操作字节流,PrintWriter操作字符流
System.out是PrintStream实例
作者: 胡进辉    时间: 2012-8-21 12:30
其实没有什么迷茫的啊,一看后缀就知道,一个字节流,一个字符流。sys.out是字节流,其实流就那样子,看字符还是字节,要不要缓冲。输出格式需求
作者: 任文杰    时间: 2012-8-21 12:56
PrintStream是字节输出流的一种,与其它字节输出流不同的是:
1、PrintStream永远不会抛出IOException,而是,异常情况仅设置可通过 checkError 方法测试的内部标志。
2、在输出数据时,自动调用flush()方法。
PrintWriter是字符输出流的一种,与其它字符输出流不同的是:
1、PrintWriter永远不会抛出IOException,而是,异常情况仅设置可通过 checkError 方法测试的内部标志。
2、在输出数据时,不会自动调用flush()方法。

print方法,在使用时,两者没有什么区别,只是在JVM内部处理机制上会有些差异。
作者: 李知伦    时间: 2012-8-21 13:32
public class PrintWriterextends Writer
向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。

PrintWriter类的自动清空缓冲区的功能被启动(构造函数中autoFlush置为true),
就是只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作。这些方法使用平台自有的行分隔符概念,而不是换行符。
所不是像PrintStream一样遇到一个换行符就清缓冲。

两种类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用 checkError() 是否出现错误。

作者: 杜鹏云    时间: 2012-8-21 18:20
   PrintWriter  向文本输出流打印对象的格式化表示形式。这个类实现在 PrintStream 中的所有 print 方法。但是它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。
   与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。
   PrintStream  为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。它还提供其他两项功能。与其他输出流不同,PrintStream 永远不会抛出 IOException;而是,异常情况仅设置可通过 checkError 方法测试的内部标志。另外,为了自动刷新,可以创建一个 PrintStream;这意味着可在写入 byte 数组之后自动调用 flush 方法,可调用其中一个 println 方法,或写入一个换行符或字节 ('\n')。
   PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。
   System.out 中out字段的类型为public static final PrintStream,其调用的方法println()当然是PrintStream。

作者: 闫博文    时间: 2012-8-22 17:41
看看毕向东老师的流操作规律
就什么都知道了





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