大家说说PrintStream 与 PrintWriter的区别?不要太肤浅,说的深彻一点!
解决方案 »
- 一个关于static的基础问题
- 帮忙看下这段代码哪里错了
- 如何配置使APPLET在应用中可以自动下载!(高手进)
- 我是java初学者,不知道这段代码错在哪,帮忙看看
- Frame的windowStateChanged什么时候会被触发
- 如何动态选择字体的字号、字型、颜色等?就象打开字体选择框的效果。
- 怎么把Timer挺掉?
- 有几个在HttpSession包中的类的作用,想请教?
- 请教高手:java 如何调用c/c++的动态链接库(dll, so)?
- 请问applet如何将信息传递给所在页面
- DES加密 windws上加密,linux不能解密
- If "String[ ]args" is a valid syntax, why "int( )func" is invalid?
比如用于网络间通信,发送消息时,可用PrintStream 也可用 PrintWriter
eg:
Socket client;
PrintStream output = new PrintStream(client.getOutputStream());
output.println("aaa");
output.flush();
把上例中的 PrintStream 换成 PrintWriter效果是一样的。Java I/O流分为两类,字节流和字符流。字节流是指InputStream/OutputStream及其子类,字符流是指Reader/Writer及其子类。这两类I/O流的class hierarchy基本上是对等的,InputStreamReader/OutputStreamWriter是InputStream /OutputStream和Reader/Writer之间的桥梁。 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。System.out是PrintStream。其实这些东西API文档中都有。
PrintWriter 字符流InputStream 和reader 区别 应该 和 这个差不多
PrintWriter是字符流
PrintWriter是字符流
/*
* <p> Unlike the {@link PrintStream} class, if automatic flushing is enabled
* it will be done only when one of the <tt>println</tt>, <tt>printf</tt>, or
* <tt>format</tt> methods is invoked, rather than whenever a newline character
* happens to be output. These methods use the platform's own notion of line
* separator rather than the newline character. */