代码之家  ›  专栏  ›  技术社区  ›  vkraemer

最小的合法zip/jar文件是什么?

  •  3
  • vkraemer  · 技术社区  · 15 年前

    我讨厌为那些我可以用if语句简单测试的东西生成异常。我知道,如果您尝试使用java.util.zip/java.util.jar API访问它,零长度的zip/jar将触发异常。所以,看起来应该有一个这些实用程序API能够使用的最小的文件。

    6 回复  |  直到 11 年前
        1
  •  2
  •   Jack    15 年前

    根据 拉链 文件格式 specs 一个zip文件至少应该有一个中心目录结构,即46字节长+3个变量字段(自己检查规范)。

    也许我们应该假设至少有一个条目暗示了该条目的文件头。

        2
  •  3
  •   Gordon Thompson    15 年前

    您真的应该将这类代码放入一个try/catch中,因为在读/写文件时有许多事情可能出错?

    如果您真的必须知道这个问题的答案,那么尝试向一个zip添加一个1字节的文件,然后看看是否失败了?通过1-gt;65536字节的一系列大小并添加到一个zip中,查看哪些大小失败,这是很容易的代码。

        3
  •  2
  •   Ceilingfish    15 年前

    JAR文件需要至少有一个条目。如果你想做一个空的,只做一个清单罐子。

    http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#JAR 清单获取关于JAR清单的更多信息。

        4
  •  1
  •   vkraemer    15 年前

    我编写了一个快速测试,我可以用java.util.zip API创建并读取的最小zip为118字节。可能有一种方法可以创建一个更小的zip文件,它符合规范并且可以用zip实用程序读取…

        5
  •  0
  •   Cheeso    15 年前

    最小的合法zip包含零个条目和一个“空”的中心目录。

    字节为:

     80 75 05 06 
    

    后跟18个零字节(0)。

    所以,22字节长。

    要创建的vbscript:

    Sub NewZip(pathToZipFile)
    
        WScript.Echo "Newing up a zip file (" & pathToZipFile & ") "
    
        Dim fso
        Set fso = CreateObject("Scripting.FileSystemObject")
        Dim file
        Set file = fso.CreateTextFile(pathToZipFile)
    
        file.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, 0)
        file.Close
    
        Set fso = Nothing
        Set file = Nothing
        WScript.Sleep 500
    End Sub
    
    
    NewZip "Empty.zip"
    
        6
  •  0
  •   npocmaka    11 年前
    final static byte[] EmptyZip={80,75,05,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00};
    public static void createEmptyZip(String path){
        try{
            FileOutputStream fos=new FileOutputStream(new File(path));
            fos.write(EmptyZip, 0, 22);
            fos.flush();
            fos.close();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }