Java中PrintStream(打印输出流)
 
PrintStream 是打印输出流,它继承于FilterOutputStream。
PrintStream 是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。与其他输出流不同,PrintStream 永远不会抛出 IOException;它产生的IOException会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError() 返回错误标记,从而查看PrintStream内部是否产生了IOException。另外,PrintStream 提供了自动flush 和 字符集设置功能。所谓自动flush,就是往PrintStream写入的数据会立刻调用flush()函数。

常用转换
 
FileReader——>BufferedReader
BufferedReader in= new BufferedReader(new FileReader("Text.java"));
 
InputStream——>InputStreamReader——>BufferedReader
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
 
String——>byte[]——>ByteArrayInputStream——>DataInputStream
DataInputStream in= new DataInputStream(new ByteArrayInputStream(str.getBytes()));
 
FileInputStream——>BufferedInputStream——>DataInputStream
DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream("Data.txt")));
 
FileWriter——>BufferedWriter——>PrintWriter
PrintWriter pw=new PrintWriter(new BufferedWriter("text.out"));
 
System.out(PrintStream)——>PrintWriter
PrintWriter pw=new PrintWriter(System.out,true);
 
FileOutputStream——>BufferedOutputStream——>PrintStream
PrintStream ps= new PrintStream(new BufferedOutputStream(new FileOutputStream("text.out")));
 
FileOutputStream——>BufferedOutputStream——>DataOutputStream
DataOutputStream dos= new DataOutputStream(new BufferedOutputStream(new FileOutputStream("Data.txt")));
 
 
构造方法:
PrintStream(File file)  创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(File file, String csn) 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
PrintStream(OutputStream out)   创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush)    创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush, String encoding)      创建新的打印流。
PrintStream(String fileName)        创建具有指定文件名称且不带自动行刷新的新打印流。
PrintStream(String fileName, String csn)  创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
 
PrintStream和DataOutputStream异同点
相同点:都是继承与FileOutputStream,用于包装其它输出流。
不同点:
(01) PrintStream和DataOutputStream 都可以将数据格式化输出;但它们在“输出字符串”时的编码不同。
     PrintStream是输出时采用的是用户指定的编码(创建PrintStream时指定的),若没有指定,则采用系统默认的字符编码。而DataOutputStream则采用的是UTF-8。 
      关于UTF-8的字符编码可以参考“字符编码(ASCII,Unicode和UTF-8) 和 大小端”
      关于DataOutputStream的更多内容,可以参考“java io系列15之 DataOutputStream(数据输出流)的认知、源码和示例”
(02) 它们的写入数据时的异常处理机制不同。
       DataOutputStream在通过write()向“输出流”中写入数据时,若产生IOException,会抛出。
       而PrintStream在通过write()向“输出流”中写入数据时,若产生IOException,则会在write()中进行捕获处理;并设置trouble标记(用于表示产生了异常)为true。用户可以通过checkError()返回trouble值,从而检查输出流中是否产生了异常。
(03) 构造函数不同
       DataOutputStream的构造函数只有一个:DataOutputStream(OutputStream out)。即它只支持以输出流out作为“DataOutputStream的输出流”。
       而PrintStream的构造函数有许多:和DataOutputStream一样,支持以输出流out作为“PrintStream输出流”的构造函数;还支持以“File对象”或者“String类型的文件名对象”的构造函数。
       而且,在PrintStream的构造函数中,能“指定字符集”和“是否支持自动flush()操作”。
 
(04) 目的不同
       DataOutputStream的作用是装饰其它的输出流,它和DataInputStream配合使用:允许应用程序以与机器无关的方式从底层输入流中读写java数据类型。
       而PrintStream的作用虽然也是装饰其他输出流,但是它的目的不是以与机器无关的方式从底层读写java数据类型;而是为其它输出流提供打印各种数据值表示形式,使其它输出流能方便的通过print(), println()或printf()等输出各种格式的数据。
 
 

Java中PrintStream(打印输出流)的更多相关文章

  1. java的PrintStream(打印输出流)详解(java_io)

    java的PrintStream(打印输出流)详解(java_io) 本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再 ...

  2. java io系列16之 PrintStream(打印输出流)详解

    本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:htt ...

  3. java 中的打印流

    package cn.zhou; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.F ...

  4. java中基本输入输出流的解释(flush方法的使用)

    转自:http://fsz521job.itpub.net/post/5606/34827 网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器 ...

  5. Java中的输入输出流

    FileInputStream和FileOutputStream 创建含磁盘文件的输入 输出流对象. FileInputStream继承自InputStream,用于读取本地文件中的字节数据,由于所有 ...

  6. java中日志打印

    目录 一.预先判断日志级别 二.避免无效日志打印 三.区别对待错误日志 四.保证记录完整内容 打印日志,要注意下面4点. 一.预先判断日志级别 对DEBUG.INFO级别的日志,必须使用条件输出或者使 ...

  7. Android(java)学习笔记166:Java中输入和输出流概念

     程序在内存中运行,文件在磁盘上,把文件从磁盘上读入内存中来,当然是输入流了,   反之,把内存中的数据写到磁盘上的文件里面去就是输出.通常都是这样的,用了过滤流的情况复杂一些,则另当别论.

  8. Android(java)学习笔记109:Java中输入和输出流概念

     程序在内存中运行,文件在磁盘上,把文件从磁盘上读入内存中来,当然是输入流了,   反之,把内存中的数据写到磁盘上的文件里面去就是输出.通常都是这样的,用了过滤流的情况复杂一些,则另当别论.

  9. java中 使用输入+输出流对对象序列化

    对象: 注意记得实现 Serializable package com.nf147.sim.entity; import java.io.Serializable; public class News ...

随机推荐

  1. Hadoop 执行过程中出现 name node is in safe mode 问题

    解决方法: 1.进入hadoop安装根目录 如 :我的hadoop 安装在/usr/local/hadoop 执行 cd /usr/local/hadoop bin/hadoop dfsadmin - ...

  2. android 到底是什么决定了app的名称 application label activity label

    原文地址:http://blog.csdn.net/lamp_zy/article/details/7878979 原来博主的博客的名字仅仅是application label表示菜比的我没有搜到,然 ...

  3. js 合并对象

    对象的合并 需求:设有对象 o1 ,o2,需要得到对象 o3 var o1 = { a:'a' }, o2 = { b:'b' }; // 则 var o3 = { a:'a', b:'b' } 方法 ...

  4. 使用Scroller制作滑块开关ToggleButton

    Scroller这个类在自己定义view中使用的还算是非常频繁的,和它名字一样.我们通常是在控制滑动的时候使用Scroller,以便让view滑动起来不那么生硬.在官方的解释上,Scroller是一个 ...

  5. hadoop(九) - hbase shell命令及Java接口

    一. shell命令 1. 进入hbase命令行  ./hbase shell 2. 显示hbase中的表  list 3. 创建user表,包括info.data两个列族 create 'user' ...

  6. docker (1) ---简介,使用

    一.docker简介: 容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机 制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机), 甚至有人把他称为新一 ...

  7. Python开发【第*篇】【模块】

    模块分为三种: 自定义模块 第三方模块 内置模块 1.模块导入 import model from model.xx.xx import xx from model.xx.xx import xx a ...

  8. PNG vs. GIF vs. JPEG vs. SVG - When best to use?

    image - PNG vs. GIF vs. JPEG vs. SVG - When best to use? - Stack Overflow https://stackoverflow.com/ ...

  9. 远程查看日志-linux

    ssh 连接服务器 ssh user@www.xxx.com -p60022 用户名@ip 端口 进入日志所在目录 cat FILENAME 查看文本文件,P.S. 在查较大文件时为了避免刷屏,请使用 ...

  10. 关于Web API中使用ajax发送请求方式的问题

    参见以下文章 http://www.west-wind.com/weblog/posts/2012/May/08/Passing-multiple-POST-parameters-to-Web-API ...