Java 将ByteArrayOutputStream传递到DataOutputStream的构造函数中

Java 将ByteArrayOutputStream传递到DataOutputStream的构造函数中,java,dataoutputstream,bytearrayoutputstream,Java,Dataoutputstream,Bytearrayoutputstream,我知道这可以使用包装器模式来完成,但我很难理解下面的代码是如何工作的 ByteArrayOutputStream bytearray = new ByteArrayOutputStream(); DataOutputStream os = new DataOutputStream(bytearray); 将ByteArrayOutputStream引用传递到DataOutputStream的构造函数中意味着DataOutputStream转换为ByteArrayOutputStream,但是如

我知道这可以使用包装器模式来完成,但我很难理解下面的代码是如何工作的

ByteArrayOutputStream bytearray = new ByteArrayOutputStream();
DataOutputStream os = new DataOutputStream(bytearray);
ByteArrayOutputStream
引用传递到
DataOutputStream
的构造函数中意味着
DataOutputStream
转换为
ByteArrayOutputStream
,但是如何转换呢

在此之后,
os.writeUTF(“字符串”)
DataOutputStream
如何转换为
ByteArrayOutputStream


幕后发生了什么?谁能解释一下细节。

数据输出流
只需要在其构造函数中实现一个
输出流
。它不关心如何实现它,只关心它满足接口。
ByteArrayOutputStream
提供一个由字节数组支持的输出流。类似地,您可以使用
FileOutputStream
获取由磁盘上的文件支持的流。从
DataOutputStream
的角度来看,它们都是用于接口的流
OutputStream
是一个非常简单的接口,它只定义了一些将字节数组写入某种存储设备的方法


场景下没有魔法,它只使用一个
OutputStream
,而不关心它是如何实现的。

数据输出流只需要在其构造函数中实现一个
OutputStream
。它不关心如何实现它,只关心它满足接口。
ByteArrayOutputStream
提供一个由字节数组支持的输出流。类似地,您可以使用
FileOutputStream
获取由磁盘上的文件支持的流。从
DataOutputStream
的角度来看,它们都是用于接口的流
OutputStream
是一个非常简单的接口,它只定义了一些将字节数组写入某种存储设备的方法


场景下没有魔法,它只使用了一个
输出流
,并不关心它是如何实现的。

实际上,这可以称为装饰器模式。DataOutputStream获取任何现有的OutputStream(在本例中为ByteArrayOutputStream),并在中存储对它的引用

protected OutputStream out;
(实际上,DataOutputStream是在java.io.FilterOutputStream中扩展的)

现在让我们看看DataOutputStream.writeInt是如何工作的(writeUTF太重)


它只需要一个int arg并使用常规的OutputStream.write(byte)逐个字节地写入它的4个字节。在本例中,这些字节将写入ByteArrayOutputStream内部字节数组。如果可以将ByTearYoutPutStream更改为FileOutputStream,并且数据将写入文件,则DataOutputStream不需要了解实际实现

实际上,这可以称为装饰图案。DataOutputStream获取任何现有的OutputStream(在本例中为ByteArrayOutputStream),并在中存储对它的引用

protected OutputStream out;
(实际上,DataOutputStream是在java.io.FilterOutputStream中扩展的)

现在让我们看看DataOutputStream.writeInt是如何工作的(writeUTF太重)


它只需要一个int arg并使用常规的OutputStream.write(byte)逐个字节地写入它的4个字节。在本例中,这些字节将写入ByteArrayOutputStream内部字节数组。如果可以将ByTearYoutPutStream更改为FileOutputStream,并且数据将写入文件,则DataOutputStream不需要了解实际实现

顺便问一下,你能接受这个答案吗:?它根本没有改变。它只是把宝钢作为它的目的地。顺便问一下,你能接受这个答案吗:?它根本没有转变。谢谢你的回答,我知道两者都实现了OutputStream,但我的问题是DataOutputStream.write(“某物”)是如何转换为ByteArrayOutputStream的。我正在浏览源代码,当调用DataOutputStream()构造函数时,它接受一个Outputstream引用,这就是我们正在做的,当调用DataOutputStream.write()时,在方法中我们看到在构造函数中传递的引用(在我们的例子中是bytearray),它实际上调用了这个引用的write方法,bytearray.write(),我想这就是它转换为bytearray的地方。谢谢你的回答,我理解这两者都实现了OutputStream,但我的问题是DataOutputStream.write(“某物”)是如何转换为ByteArrayOutputStream的。我正在浏览源代码,当调用DataOutputStream()构造函数时,它接受一个Outputstream引用,这就是我们正在做的,当调用DataOutputStream.write()时,在方法中我们看到在构造函数中传递的引用(在我们的例子中是bytearray),它实际上调用了这个引用的write方法,write(),我想这就是它转换为bytearray的地方。