关于PrintWriter和PrintStream的差异

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();
		}
	}
}



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值