将文件保存在“.zip”文件夹中会加快文件写入网络驱动器的时间吗?

时间:2016-05-28 00:13:24

标签: java file-writing bufferedoutputstream

我知道当我将新文件写入以“.zip”结尾的文件夹时,它会压缩文件。这是在JAVA中使用BufferedOutputStream并保存到Windows文件系统时。我将这些文件保存到网络驱动器,因此写入时间取决于网络速度。

保存到.zip文件夹会加快写入时间吗?换句话说,它是否传输未压缩的数据然后压缩它(因此它不会加快写入时间)或压缩然后写出文件?对不起,如果这是一个无知的问题。

1 个答案:

答案 0 :(得分:1)

问题中存在很多误解,我认为值得一次审阅一次。

  

我知道当我将新文件写入以“.zip”结尾的文件夹时,它会压缩文件。

这是不正确的。创建带有“.zip”后缀的文件不会自动使其压缩。将文件写入以“.zip”作为其文件名后缀(?!?)的目录也不会。不是Java。没有其他语言。

为了获得压缩,应用程序需要采取措施来实现这一点。在Java中,您可以使用ZipOutputStream以ZIP文件格式编写文件。但是,ZIP文件实际上是一种“存档”格式,旨在将多个文件保存在ZIP文件中。如果您只是尝试压缩单个文件,那么有更好的选择;例如GZIPOutputStream

(你所说的这个所谓的“ZIP文件夹”也可能是一个普通的ZIP文件,已被“挂载”为环回文件系统。你/其他人必须明确地设置它无论如何,如果这就是这里发生的事情,它与Java无关。这一切都发生在外部软件和ZIP被“安装”的操作系统中。)

  

这是在JAVA中使用BufferedOutputStream并保存到Windows文件系统时。

呃...不。往上看。但是你说可能更好地使用BufferedOutputStream来编写文件是正确的,尽管只有当你的应用程序以小块编写文件时它才真正有用。例如一次一个字节。 (流压缩使问题复杂化,因此很难对此给出简单,一般的答案。)

  

我将这些文件保存到网络驱动器,因此写入时间取决于网络速度。

正确。它还取决于网络延迟,使用的协议和远程文件服务器上的负载。 (如果你有一个ZIP“挂载”,那么这也会增加开销。)

  

保存到.zip文件夹会加快写入时间吗?

也许。往上看。这取决于你对ZIP文件夹的意思。

忽略这一点,从Java 以压缩和/或存档形式编写文件(正确的方法)可以加速写入。实际上有两件事需要考虑:

  • 对于简单压缩,您需要通过移动和存储较少的字节来缩短应用程序(!!)压缩和解压缩数据所需时间(和磁盘空间)。

  • 对于ZIP文件(和类似的存档格式),还有第二个潜在的节省。与存储和检索包含这些文件的单个ZIP文件相比,从文件系统存储和检索大量单个小文件的速度很慢。

  

换句话说,它是否传输未压缩的数据然后压缩它(因此它不会加快写入时间)或压缩然后写出文件?

有很多变数,很难确定。但除非你做了一些奇怪的事情,否则字节很可能是通过网络以压缩形式发送的。

最后,我建议你不要尝试组合装载的ZIP文件和网络共享:

  • 两者的结合可能会导致性能变差。

  • 如果网络共享在不方便的位置脱机,您可能会遇到损坏的ZIP或丢失的文件。