A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张建峰 初级黑马   /  2012-8-20 23:51  /  2494 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在IO流中的Print比较迷茫:PrintStream与PrintWriter的用法到底是怎么用的?
两者都属于输出流吗?
两者都有print方法,有什么区别呢?
我们一般写的println调用的是谁的?如果是printStream的,那么一直都是它的吗
哪位大神能用简单易懂的文字给说明下区别和用法啊

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

6 个回复

倒序浏览
PrintStream操作字节流,PrintWriter操作字符流
System.out是PrintStream实例
回复 使用道具 举报
其实没有什么迷茫的啊,一看后缀就知道,一个字节流,一个字符流。sys.out是字节流,其实流就那样子,看字符还是字节,要不要缓冲。输出格式需求
回复 使用道具 举报
PrintStream是字节输出流的一种,与其它字节输出流不同的是:
1、PrintStream永远不会抛出IOException,而是,异常情况仅设置可通过 checkError 方法测试的内部标志。
2、在输出数据时,自动调用flush()方法。
PrintWriter是字符输出流的一种,与其它字符输出流不同的是:
1、PrintWriter永远不会抛出IOException,而是,异常情况仅设置可通过 checkError 方法测试的内部标志。
2、在输出数据时,不会自动调用flush()方法。

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

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

两种类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用 checkError() 是否出现错误。
回复 使用道具 举报
   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。
回复 使用道具 举报
看看毕向东老师的流操作规律
就什么都知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马