繁体   English   中英

Java I / O流定义和子类型

[英]Java I/O stream definition and subtypes

我是Java I / O的新手,并阅读了该网站上的一篇文章:

即使它们链接到的实际物理设备不同,所有流的行为也相同。 因此,可以将相同的I / O类和方法应用于任何类型的设备

引用自: 流定义

我无法确定的是,所有流(以不同的字节流子类型为例-BufferedInputStreamFilterInputStreamObjectInputStream等)的行为方式相同,并且可以连接到任何物理端口设备,何时将它们实现为不同的类以提供不同的功能并适应不同的源/目的地? 例如,我可以使用ObjectInputStreamFileOutputStream来读取和写入控制台吗? 不同的流,不同的设备以及所有(流)可以连接到所有(设备)-我在这里感到迷茫。

引用并没有说您可以将任何流连接到任何设备。 连接到特定设备的InputStreamOutputStream有不同的实现-例如, FileInputStream连接到文件系统上的文件,而ByteArrayInputStream连接到内存中的字节数组。

引言所解释的主要思想是,所有这些不同类型的流都是InputStreamOutputStream类的所有扩展,因此您可以使用任何特定类型的流OutputStream执行所有通用操作,无论特定类型的流从中读取数据或向中写入数据。

一些流是其他流的包装,从而增加了特定功能。 例如, BufferedOutputStream将缓冲添加到基础流。 这通常很有用,因为对于某些流而言,写块要比逐字节写效率更高BufferedOutputStream收集您写入缓冲区的字节,然后将其作为一个块写入基础流。 ObjectOutputStream是另一个包装器,它添加了将可序列化的Java对象转换为可以写入基础流的字节的功能。

您不能为每个设备使用每个Stream。 根据您问题中的定义(我大胆),

所有流的行为均相同。

因此,可以对每个Stream使用相同的方法,这意味着每个Stream都具有相同的方法,因为它们继承自java.io.OutputStreamjava.io.InputStream

因此,无论您要写入控制台还是文件或网络套接字,都没有关系,例如,您可以始终将字节数组写入设备。

但是,有不同的实现方式可以不同地处理此字节数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM