PrintStream和PrintWriter的区别简介

PrintStream和PrintWriter的API几乎相同,都能输出各种形式的数据,构造方法也几乎相同

PrintWriter多了个接受Writer参数

API比较:

那么,它们的区别究竟在哪里?来自stackflow

主要意思就是,2个类的功能基本相同,PrintStream能做的PrintWriter也都能实现,并且PrintWriter的功能更为强大。但是由于PrintWriter出现的比较晚,较早的System.out使用的是PrintStream来实现的,所以为了兼容就没有废弃PrintStream。

2个类最大的差别是,PrintStream在输出字符,将字符转换为字节时采用的是系统默认的编码格式,这样当数据传输另一个平台,而另一个平台使用另外一个编码格式解码时就会出现问题,存在不可控因素。而PrintWriter可以在传入Writer时可由程序员指定字符转换为字节时的编码格式,这样兼容性和可控性会更好。

下面这个程式显示了PrintStream与PrintWriter两个物件在处理相同输出目的时的作法,程式将会在荧幕上显示 "简体中文" 四个字元:

StreamWriterDemo.java
package onlyfun.caterpillar;
import java.io.*;
public 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();
	}
}
}

总结

以上就是本文关于PrintStream和PrintWriter的区别简介的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • Java 中的Printstream介绍_动力节点Java学院整理

    PrintStream 介绍 PrintStream 是打印输出流,它继承于FilterOutputStream. PrintStream 是用来装饰其它输出流.它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. 与其他输出流不同,PrintStream 永远不会抛出 IOException:它产生的IOException会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError() 返回错误标记,从而查看PrintStream内部是否产生了IOException

  • Java中的PrintWriter 介绍_动力节点Java学院整理

    PrintWriter 介绍 PrintWriter 是字符类型的打印输出流,它继承于Writer. PrintStream 用于向文本输出流打印对象的格式化表示形式.它实现在 PrintStream 中的所有 print 方法.它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入. PrintWriter 函数列表 PrintWriter(OutputStream out) PrintWriter(OutputStream out, boolean autoFlus

  • Java servlet 使用 PrintWriter 时的编码与乱码的示例代码

    在前面的网页中的编码与乱码系列中,曾多次提到使用 servlet 方式构建的动态响应流,不过在那里都是直接使用字节流的方式,不过,更为常见的方式是使用字符流.而在前面,又谈到了 Java 字节流与字符流的话题. 有了前面的基础,现在来说下 Java servlet 中使用字符流,也即是 PrintWriter 时的编码与乱码问题. 回顾字节流的情形 先回顾一下,在之前的字节流响应中,我们使用 String.getBytes 方法,然后总是显式传入编码的参数,使它与 meta 中或者 header

  • PrintStream和PrintWriter的区别简介

    PrintStream和PrintWriter的API几乎相同,都能输出各种形式的数据,构造方法也几乎相同 PrintWriter多了个接受Writer参数 API比较: 那么,它们的区别究竟在哪里?来自stackflow 主要意思就是,2个类的功能基本相同,PrintStream能做的PrintWriter也都能实现,并且PrintWriter的功能更为强大.但是由于PrintWriter出现的比较晚,较早的System.out使用的是PrintStream来实现的,所以为了兼容就没有废弃Pr

  • 浅谈PrintStream和PrintWriter的区别和联系

    前言 这两者在往文件中写入字符串时,最终都需要通过字符集的映射关系得到对应字节. 但这二者在通过char得到对应若干字节的时机不一样,以new PrintStream( new BufferedOutputStream( new FileOutputStream("BasicFileOutput.out")));和new PrintWriter( new BufferedWriter( new FileWriter("BasicFileOutput.out")))为

  • Java集合与数组区别简介及相互转换实例

    数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) (2)JAVA集合可以存储和操作数目不固定的一组数据.(3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用. 联系:使用相应的toArray()和Arrays.asList()方法可以回想转换. List和ArrayList的区别 1.List是接口,List特性就是有序,会确保以一定的顺序保存元素. ArrayList是它的实现类

  • curl和libcurl的区别简介

    curl简介 curl是利用URL语法在命令行方式下工作的开源文件传输工具. 它支持很多协议:DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. curl同样支持SSL证书,HTTP POST, HTTP PUT,FTP上传,基于表单的HTTP上传,代理(proxies).coo

  • JSP中Servlet的Request与Response的用法与区别

    JSP中Servlet的Request与Response的用法与区别 简介:Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一,Request Request代表请求对象,其中封装了对请求中具有请求行.请求头.实体内容的操作的方法

  • C++中运算符 &和&&、|和|| 的详解及区别

    C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型 区别: if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了. if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值

  • @PathParam和@QueryParam区别简析

    本文主要研究的是@PathParam和@QueryParam区别问题,具体如下. 问题 今天调试一个上传功能,客户端手持机发送数据,在URL中附加一个参数,后台用@PathParam接收,但是报错,无法获取这个参数. url:http://192.168.1.3/web1_service/convert/vict_hj1000?unit=160106 代码 @Path("/vict_hj1000") @POST @Consumes(MediaType.MULTIPART_FORM_DA

  • java解析XML Node与Element的区别(推荐)

    对Element和Node有困惑是因为对xml整个结构不了解,以下作为一个简要概述: 以下图为w3c.org网站的xml文档树图: 从上图可以看出,一个xml文档由元素节点,属性节点,文本节点构成,其中bookstore被称为文档元素或根元素,也是一个元素节点 XML DOM是这样规定一个节点的 XML 文档中的每个成分都是一个节点. 整个文档是一个文档节点    即Document节点.在java中Document接口是继承于Node接口,表示整个XML 文档 每个 XML 标签是一个元素节点

  • Java、C++中子类对父类函数覆盖的可访问性缩小的区别介绍

    前言 "Java 和 C++ 中子类对父类函数覆盖的可访问性缩小的问题"的题目看起来比较学术化,但的确是一个容易忽视的问题.本文力求详细阐述这一问题在 Java 以及 C++ 中的区别. 先介绍什么是"子类对父类函数覆盖的可访问性缩小".对于继承而言,子类可以覆盖父类的"虚函数"--尽管 Java 中没有虚函数这一术语,但可以把 Java 的所有函数都看作虚函数,因为 Java 的所有函数都可以被子类覆盖.这里仅借用"虚函数"

  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入: 缓冲流为什么比普通的文件字节流效率高? 不带缓冲的操作,每读一个字节就要写入一个字节. 由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低. 带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里. 等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多! 这就是两者的区

随机推荐