修改数据流的行为

在Java 1.0中,数据流通过FilterInputStream和FilterOutputStream的“装饰器”(Decorator)子类适应特定的需求。Java 1.1的IO流沿用了这一思想,但没有继续采用所有装饰器都从相同“filter”(过滤器)基础类中衍生这一做法。若通过观察类的层次结构来理解它,这可能令人出现少许的困惑。
在下面这张表格中,对应关系比上一张表要粗糙一些。之所以会出现这个差别,是由类的组织造成的:尽管BufferedOutputStream是FilterOutputStream的一个子类,但是BufferedWriter并不是FilterWriter的子类(对后者来说,尽管它是一个抽象类,但没有自己的子类或者近似子类的东西,也没有一个“占位符”可用,所以不必费心地寻找)。然而,两个类的接口是非常相似的,而且不管在什么情况下,显然应该尽可能地使用新版本,而不应考虑旧版本(也就是说,除非在一些类中必须生成一个Stream,不可生成Reader或者Writer)。
 


Filters:
Java 1.0 class
 


Corresponding Java 1.1 class
 


FilterInputStream
 


FilterReader
 


FilterOutputStream
 


FilterWriter (abstract class with no subclasses)
 


BufferedInputStream
 


BufferedReader
(also has readLine())
 


BufferedOutputStream
 


BufferedWriter
 


DataInputStream
 


use DataInputStream
(Except when you need to use readLine(), when you should use a BufferedReader)
 


PrintStream
 


PrintWriter
 


LineNumberInputStream
 


LineNumberReader
 


StreamTokenizer
 


StreamTokenizer
(use constructor that takes a Reader instead)
 


PushBackInputStream
 


PushBackReader
 

过滤器:Java 1.0类 对应的Java 1.1类

FilterInputStream FilterReader
FilterOutputStream FilterWriter(没有子类的抽象类)
BufferedInputStream BufferedReader(也有readLine())
BufferedOutputStream BufferedWriter
DataInputStream 使用DataInputStream(除非要使用readLine(),那时需要使用一个BufferedReader)
PrintStream PrintWriter
LineNumberInputStream LineNumberReader
StreamTokenizer StreamTokenizer(用构建器取代Reader)
PushBackInputStream PushBackReader

有一条规律是显然的:若想使用readLine(),就不要再用一个DataInputStream来实现(否则会在编译期得到一条出错消息),而应使用一个BufferedReader。但除这种情况以外,DataInputStream仍是Java 1.1 IO库的“首选”成员。
为了将向PrintWriter的过渡变得更加自然,它提供了能采用任何OutputStream对象的构建器。PrintWriter提供的格式化支持没有PrintStream那么多;但接口几乎是相同的。

时间: 2024-12-24 20:57:08

修改数据流的行为的相关文章

IIS常见问题及解答以及故障分析

解决以下常见问题:1. 我怎样对IIS设置进行备份?  2. 什么工具能帮助我施加一个负载并进行应用程序的强度测试? 3. 当Localstart.asp返回了一个"正在创建中"响应时,发生了什么事情? 4. 能在Microsoft Windows XP Home Edition中安装IIS或PWS吗? 5. ISAPI筛选器能在一个单独的进程空间中运行吗? 6. 我在哪能获得这样的示例代码--它显示了如何在使用WebDAV的ASP中编辑文档?7. 当我试图用ASP去访问一个数据库时,

除Hadoop大数据技术外,还需了解的九大技术

除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow 6.Apache NiFi 7.Druid 8.LinkedIn WhereHows 9.Microsoft Cognitive Services Hadoop是大数据领域最流行的技术,但并非唯一.还有很多其他技术可用于解决大数据问题.除了Apache Hadoop外,另外9个大数据技术也是必须要了

《Fiddler调试权威指南》——1.2 快速入门

1.2 快速入门 1.2.1 基本概念 Fiddler是一款基于Windows系统的专用代理服务器软件.本地运行的程序,如Web浏览器.Office应用程序以及其他客户端应用,可以把HTTP和HTTPS请求发送给Fiddler,Fiddler通常把这些请求转发给Web服务器.然后,服务器把这些请求的响应返回给Fiddler,Fiddler再把这些响应转发给客户端. 几乎所有使用网络协议的程序都支持代理服务器,因此Fiddler几乎适用于所有应用.当启动Fiddler来捕获请求和响应时,Fiddl

什么是好的测试用例[51Testing]

这项研究部分基于NSF制定的EIA-0113539 ITR/SY+PE:"提高软件测试者的教育." 材料中表达的任何观点.发现和结论或者评论都属于作者,不代表国家科学基金会(NSF)的观点. 摘要      设计好的测试用例是一门复杂的艺术.其复杂性有三个原因:        1.测试用例能帮我们发现信息.不同类型的测试对不同类型的信息有效.        2.可以从多方面证明测试用例是"好的".但没有一个测试用例在任何方面都很优秀.        3.人们往往会根

除Hadoop外你还需要知道的9个大数据技术

Hadoop是大数据领域最流行的技术,但并非唯一.还有很多其他技术可用于解决大数据问题.除了Apache Hadoop外,另外9个大数据技术也是必须要了解的. Apache Flink Apache Samza Google Cloud Data Flow StreamSets Tensor Flow Apache NiFi Druid LinkedIn WhereHows Microsoft Cognitive Services Apache Flink:是一个高效.分布式.基于Java实现的

VoIP安全技术研究

安全问题成为IP电话业务发展的瓶颈 基于IP网络的话音传输(VoIP)技术目前已经发展成为一种专门的话音通信技术,其应用范围越来越广. 但是研究发现,除服务质量等问题外,安全问题是企业首席技术官(CIO)们在做VoIP决策时 重点考虑的内容.在现实中,许多客户表示,安全状况不能达到企业的应用标准是他们暂时不想部署 VoIP的原因.目前,VoIP面临的安全议题主要有4个:拒绝服务(DoS)攻击.非法接入.话费诈欺或窃听等威胁.市场研究机构的调查结果显示,亚太区服务供应商在VoIP安全性方面的支出远

浅析IP网络的话音传输VoIP安全技术

基于IP网络的话音传输(VoIP)技术目前已经发展成为一种专门的话音通信技术,其应用范围越来越广. 但是研究发现,除服务质量等问题外,安全问题是企业首席技术官(CIO)们在做VoIP决策时 重点考虑的内容.在现实中,许多客户表示,安全状况不能达到企业的应用标准是他们暂时不想部署 VoIP的原因.目前,VoIP面临的安全议题主要有4个:拒绝服务(DoS)攻击.非法接入.话费诈欺或窃听等威胁.市场研究机构的调查结果显示,亚太区服务供应商在VoIP安全性方面的支出远远落后于美国和欧洲. 预计2005年

重构连载之软件修改的四种动机

软件,自从被我们开发出来并交付使用以后,如果它运行得好好的,我们是不会去修改它的.我们要修改软件,万变不离其宗,无非就是四种动机: 1.增加新功能: 2.原有功能有BUG: 3.改善原有程序的结构: 4.优化原有系统的性能[1]. 第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求. 软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度.它涉及到一个企业.一个软件的信誉度与生命力,因此为所有软件企业所高度重视.但是,就在所有企业高管把软件外部质量放在高于

以物流案例看基于表格存储实时数据流的serverless计算

摘要 许多业务有实时数据处理的需求.相较于传统的数据库+流计算+应用服务器方案,使用基于表格存储实时数据流的Serverless计算方案有自动弹性伸缩及开发简单.部署简单等优点. 本文通过一个想象的物流案例来说明如何实施"基于表格存储实时数据流的Serverless计算方案".本文更侧重于架构和代码的介绍与解说,更详细的实施步骤请看这里. 一个物流案例 案例介绍 在物流系统运行过程中,在使用扫码枪写入相应的物流信息后,所有用户预设的计算任务将在后台自动的运行.在本文中,扫码枪写入的物流