我知道当我将新文件写入以“.zip”结尾的文件夹时,它会压缩文件。这是在 JAVA 中使用 BufferedOutputStream 并保存到 Windows 文件系统时。我将这些文件保存到网络驱动器,因此写入时间取决于网络速度。
保存到 .zip 文件夹会加快写入时间吗?换句话说,它是传输未压缩的数据然后压缩它(所以它不会加快写入时间)还是压缩然后写出文件?对不起,如果这是一个无知的问题。
我知道当我将新文件写入以“.zip”结尾的文件夹时,它会压缩文件。这是在 JAVA 中使用 BufferedOutputStream 并保存到 Windows 文件系统时。我将这些文件保存到网络驱动器,因此写入时间取决于网络速度。
保存到 .zip 文件夹会加快写入时间吗?换句话说,它是传输未压缩的数据然后压缩它(所以它不会加快写入时间)还是压缩然后写出文件?对不起,如果这是一个无知的问题。
问题中有很多误解,我认为值得一次解决。
我知道当我将新文件写入以“.zip”结尾的文件夹时,它会压缩文件。
这是不正确的。创建带有“.zip”后缀的文件不会自动将其压缩。将文件写入以“.zip”作为文件名后缀 (?!?) 的目录也不行。不是在 Java 中。不是其他语言。
为了获得压缩,应用程序需要采取措施来实现这一点。在 Java 中,您可以使用ZipOutputStream
ZIP 文件格式编写文件。但是,ZIP 文件实际上是一种“存档”格式,旨在将多个文件保存在一个 ZIP 文件中。如果您只是尝试压缩单个文件,还有更好的选择;例如GZIPOutputStream
。
(您所说的这个所谓的“ZIP 文件夹”也有可能是一个普通的 ZIP 文件,它已被“挂载”为环回文件系统。您/其他人必须明确设置它。无论如何,如果这是这里发生的事情,那么它与 Java 无关。这一切都发生在外部软件和“安装”ZIP 的操作系统中。)
这是在 JAVA 中使用 BufferedOutputStream 并保存到 Windows 文件系统时。
呃……不。看上面。但是,您是正确的,使用 a来写入文件可能BufferedOutputStream
会更好,尽管只有当您的应用程序以小块写入文件时它才真正有帮助;例如,一次一个字节。(流压缩使问题复杂化,因此很难给出一个简单、通用的答案。)
我将这些文件保存到网络驱动器,因此写入时间取决于网络速度。
正确的。它还取决于网络延迟、使用的协议和远程文件服务器上的负载。(如果您“安装”了 ZIP,那么这也会增加开销。)
保存到 .zip 文件夹会加快写入时间吗?
也许。看上面。这取决于您所说的 ZIP 文件夹是什么意思。
忽略这一点,从 Java 以压缩和/或存档形式编写文件(正确的方式)可能会加快写入速度。其实有两点需要考虑:
对于简单的压缩,您需要权衡应用程序 (!!) 压缩和解压缩数据所花费的时间与通过移动和存储更少字节而节省的时间(和磁盘空间)。
对于 ZIP 文件(和类似的存档格式),还有第二种可能的保存方式。与存储和检索包含这些文件的单个 ZIP 文件相比,从文件系统存储和检索大量单个小文件的速度很慢。
换句话说,它是传输未压缩的数据然后压缩它(所以它不会加快写入时间)还是压缩然后写出文件?
变量太多,很难说清楚。但除非你做了一些奇怪的事情,否则字节很可能是以压缩形式通过网络发送的。
最后,我建议您不要尝试将挂载的 ZIP 文件和网络共享组合在一起:
两者的结合可能会以使性能更差的方式相互作用。
如果网络共享在不方便的地方脱机,您最终可能会收到损坏的 ZIP 文件或丢失文件。