[英]Java I/O stream definition and subtypes
我是Java I / O的新手,并阅读了该网站上的一篇文章:
即使它们链接到的实际物理设备不同,所有流的行为也相同。 因此,可以将相同的I / O类和方法应用于任何类型的设备
引用自: 流定义
我无法确定的是,所有流(以不同的字节流子类型为例-BufferedInputStream , FilterInputStream , ObjectInputStream等)的行为方式相同,并且可以连接到任何物理端口设备,何时将它们实现为不同的类以提供不同的功能并适应不同的源/目的地? 例如,我可以使用ObjectInputStream或FileOutputStream来读取和写入控制台吗? 不同的流,不同的设备以及所有(流)可以连接到所有(设备)-我在这里感到迷茫。
引用并没有说您可以将任何流连接到任何设备。 连接到特定设备的InputStream
和OutputStream
有不同的实现-例如, FileInputStream
连接到文件系统上的文件,而ByteArrayInputStream
连接到内存中的字节数组。
引言所解释的主要思想是,所有这些不同类型的流都是InputStream
和OutputStream
类的所有扩展,因此您可以使用任何特定类型的流OutputStream
执行所有通用操作,无论特定类型的流从中读取数据或向中写入数据。
一些流是其他流的包装,从而增加了特定功能。 例如, BufferedOutputStream
将缓冲添加到基础流。 这通常很有用,因为对于某些流而言,写块要比逐字节写效率更高BufferedOutputStream
收集您写入缓冲区的字节,然后将其作为一个块写入基础流。 ObjectOutputStream
是另一个包装器,它添加了将可序列化的Java对象转换为可以写入基础流的字节的功能。
您不能为每个设备使用每个Stream。 根据您问题中的定义(我大胆),
所有流的行为均相同。
因此,可以对每个Stream使用相同的方法,这意味着每个Stream
都具有相同的方法,因为它们继承自java.io.OutputStream
或java.io.InputStream
。
因此,无论您要写入控制台还是文件或网络套接字,都没有关系,例如,您可以始终将字节数组写入设备。
但是,有不同的实现方式可以不同地处理此字节数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.