Java 何时使用deflateroutputstream的deflate()?

Java 何时使用deflateroutputstream的deflate()?,java,outputstream,Java,Outputstream,我试图学习如何在寒假期间使用deflateroutputstream来消磨时间。我很困惑,因为当我看文档时,它说deflate用于将压缩数据写入outputstream,而write用于将数据写入deflateroutputstream压缩的outputstream 然而,我在网上查看示例代码,但根本没有人使用deflate。到目前为止,我看到的所有代码都只是写入deflateroutputstream,而没有调用deflate。 我注意到代码将fileoutputstream放在deflat

我试图学习如何在寒假期间使用deflateroutputstream来消磨时间。我很困惑,因为当我看文档时,它说deflate用于将压缩数据写入outputstream,而write用于将数据写入deflateroutputstream压缩的outputstream

然而,我在网上查看示例代码,但根本没有人使用deflate。到目前为止,我看到的所有代码都只是写入deflateroutputstream,而没有调用deflate。

我注意到代码将fileoutputstream放在deflateroutputstream中,但是它是如何交互的?当数据写入deflateroutputstream时,它会自动调用deflate将压缩数据发送到fileoutputstream吗?

它是受保护的:它用于对该流进行子类化的任何内容,而就您而言,您并不是对其进行子类化,这是一个不能包含在推理中的实现细节,也不是供您调用的

当然,除非您将其子类化

你可以这样做——这是一种在桌面上构建基于LZ的压缩流的工具包。这就是GZipOutputStream和ZipOutputStream扩展它的原因:它们是不同的容器,或多或少使用相同的压缩技术。他们确实调用了这个deflate。除非您正在开发自己的基于LZ的压缩系统,或者为现有的、非zip、非gz、非deflater的压缩格式实现读取器,否则这并不适合您

这些类型的输出流称为“filterstreams”:它们本身并不表示任何资源,而是围绕一个资源进行封装。它们可以环绕任何输出流或任何输入流,可以说这一概念在“两侧”都起作用,并在传输中修改字节

var out=new deflateroutputstreamwhere创建一个新的deflater流,该流将压缩通过out.writestuff发送给它的任何数据,它将依次获取压缩的数据并将其发送给任何对象。它的工作是:

根据out.write获取字节,并根据执行作业所需的缓冲区大小: ... 压缩这些数据的方法。 然后,在压缩数据时,通过调用其write方法将其发送到包装的outputstream(在本例中,通过调用其write方法)来处理压缩数据。 基本用法是:

创建一个资源,例如Files.newOutputStream或someSocket.getOutputStream或httpServletResponse.getOutputStream或System.out或任何其他生成流的资源-这是一个抽象概念,原因在于:使事情变得灵活。 将该资源包装到DeflaterOutputStream中 将所有数据写入deflateroutputstream。忘了原始文件吧——您创建它是为了将其传递给DeflaterOutputStream,这就是您与底层流的交互结束的地方。 关闭deflaterstream,最终也会关闭底层流。 它是受保护的:它用于对该流进行子类化的任何事情,而您并没有对其进行子类化,因此就您而言,它是一个实现细节,您不能将其包含在您的推理中,也不能让您调用它

当然,除非您将其子类化

你可以这样做——这是一种在桌面上构建基于LZ的压缩流的工具包。这就是GZipOutputStream和ZipOutputStream扩展它的原因:它们是不同的容器,或多或少使用相同的压缩技术。他们确实调用了这个deflate。除非您正在开发自己的基于LZ的压缩系统,或者为现有的、非zip、非gz、非deflater的压缩格式实现读取器,否则这并不适合您

这些类型的输出流称为“filterstreams”:它们本身并不表示任何资源,而是围绕一个资源进行封装。它们可以环绕任何输出流或任何输入流,可以说这一概念在“两侧”都起作用,并在传输中修改字节

var out=new deflateroutputstreamwhere创建一个新的deflater流,该流将压缩通过out.writestuff发送给它的任何数据,它将依次获取压缩的数据并将其发送给任何对象。它的工作是:

根据out.write获取字节,并根据执行作业所需的缓冲区大小: ... 压缩这些数据的方法。 然后,在压缩数据时,通过调用其write方法将其发送到包装的outputstream(在本例中,通过调用其write方法)来处理压缩数据。 基本用法是:

创建一个资源,例如Files.newOutputStream或someSocket.getOutputStream或httpServletResponse.getOutputStream或System.out或任何其他生成流的资源-这是一个抽象概念,原因在于:使事情变得灵活。 将该资源包装到DeflaterOutputStream中 将所有数据写入deflateroutputstream。忘了原始文件吧——您创建它是为了将其传递给DeflaterOutputStream,这就是您与底层流的交互结束的地方。 关闭放气阀 h最终也将关闭底层流。