PrintStream类和PrintWriter类
PrintStream类是过滤器类中一个不可疏忽的成员,最大约的规范输出即将借助于它——我们常用的System.out变量即便PrintStream实例。与之对应的字符流类是PrintWriter类。
PrintStream有两个构造函数(在新版API中已符号为过时):
■public PrintStream(OutputStream out)
■public PrintStream(OutputStream out,boolean autoFlush)
其中,autoFlush置为true时,每当输出遭到换行符,缓冲区的内容就***使全副输出,好像调用了顺次flush()。但要当心,万一没遭到换行符,还是会有数据“憋”在缓冲区里。
措施(已纯熟的就不解释):
■public void write(int b)
■public void write(byte b,int offset,int length)
■public void flush()
■public void close()
■public void print(Object obj)
这个措施功能是极其壮大的,它能够输出任何对象,而无须另加解释。另外print()措施有众多重载形式,即有多种参数。它们是字符串(String)、字符数组(char[])、字符(char)、整数(int)、长整数(long)、浮点数(float)、双精度浮点数(double)、布尔值(boolean)。其中,输出多个数单位的print()措施(也即便指参数为String和char[]的)是同步(synchronized)措施。
■public void println()输出一个换行符。
■public synchronized void println(Object obj)
println()措施有9个重载形式,几乎即便print()措施的翻版。单一的差异在于println()措施都是同步的。
■public boolean checkError()
察看输出过程中有什么讹谬,如有,归来true值。凡是输出流中揭示顺次讹谬,则出错后的任意对checkError()的调用均会归来真值。
下面推荐PrintWriter类。
好像第二节中所说,PrintWriter是JDK1.1版添置了与字节流I/O相对应的字符流I/O。然而,为了坚持接受性,本来的类几乎未曾修改。再加之调试的必需,PrintStream类被保留,并且System类中的成员变量out、err仍作为它的对象。然而,PrintWriter用于大多数输出比PrintStream更为轻便。因而1.1版的API中提倡新开发的代码利用PrintWriter类,并将PrintStream类的两个构造函数符号为过时。这么,固然利用System.out输出不会发生问题,在过程中创立新的PrintStream对象时却会发生编译时的警告。
PrintWriter类与PrintStream类的措施是对应的。有一个不同之外需提请读者当心,即便目前者的积极清空缓冲区的功能被使能时(构造函数中autoFlush置为true),仅当println()措施被调用时才积极清缓冲区,而不是像PrintStream一样遭到一个换行符就清缓冲。
PrintStream,它能够将Javawww.2coalarm.info的大约材料型态等材料,直接转换为系统预设编码下对应的字元,再输出至OutputStream中,而这边要推荐的PrintWriter其功能上与PrintStream相仿,除非接受OutputStream之外,它还能够接受Writer物件作为输出的对象,当您本来是利用Writer物件在作处理 bj.bjfzfy.com,而目前想要套用println()之类的措施时,利用PrintWriter会是比拟得体的作法。
下面这个程式揭示了PrintStream与PrintWriter两个物件在处理雷同输出目标时的作法,程式将会在荧幕上揭示 "简体中文" 四个字元:
import java.io.*;
class StreamWriterDemo {
public static void main(String[] args) {
try {
byte[] sim = { (byte) 0xbc, (byte) 0xf2, // 简
(byte) 0xcc, (byte) 0xe5, // 体
(byte) 0xd6, (byte) 0xd0, // 中
(byte) 0xce, (byte) 0xc4 }; // 文
InputStreamReader inputStreamReader = new InputStreamReader(
new ByteArrayInputStream(sim), "GB2312");
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(System.out, "GB2312"));
PrintStream printStream = new PrintStream(System.out, true,"GB2312");
int in;
while ((in = inputStreamReader.read()) != -1) {
printWriter.println((char) in);
printStream.println((char) in);
}
inputStreamReader.close();
printWriter.close();
printStream.close();
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}