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的地方。