Java 区分*.zip文件和压缩容器文件

Java 区分*.zip文件和压缩容器文件,java,zip,file-format,Java,Zip,File Format,我有一个作为文件内容的输入数据流,但没有附加任何文件信息。我希望能够区分数据表示*.zip文件的情况和容器文件格式(例如*.docx、*.odt、*.jar)在封面下使用zip的情况。我不需要知道容器格式是什么,只需要知道流是否为“普通”zip(因此我知道是否适合将流拆分为单独的文件) 这可能吗?我很乐意在减压后或之前进行检测 理想情况下,我正试图用Java实现这一点,但如果有其他语言的代码示例,我很乐意在必要时移植它们。没有绝对可靠和正确的方法来实现这一点,因为那些使用ZIP格式作为容器的格式

我有一个作为文件内容的输入数据流,但没有附加任何文件信息。我希望能够区分数据表示*.zip文件的情况和容器文件格式(例如*.docx、*.odt、*.jar)在封面下使用zip的情况。我不需要知道容器格式是什么,只需要知道流是否为“普通”zip(因此我知道是否适合将流拆分为单独的文件)

这可能吗?我很乐意在减压后或之前进行检测


理想情况下,我正试图用Java实现这一点,但如果有其他语言的代码示例,我很乐意在必要时移植它们。

没有绝对可靠和正确的方法来实现这一点,因为那些使用ZIP格式作为容器的格式往往是100%有效和正确的ZIP文件

所以它们是压缩文件

但是,由于这些格式的数量不是无限的(而且在现实世界中通常只会发现其中的一小部分),您可能只需要专门检测这些格式,并将所有您无法识别的内容视为“真实”ZIP文件即可

这些格式中的大多数都需要在文件的早期字节中使用某种易于检查的标识符,因此,如果您对编写特定于规范的代码感到满意,那么就应该很容易了

正确地检测这些格式中的大多数,因此查看其源代码应该会为您提供足够的指针

一些例子:

  • (此文件包含各种归档,而不仅仅是ODx文件)

它也很可能(还没有检查)已经完成了所有的检测。

谢谢-您对
文件的评论将我带到SimpleMagic库(),它似乎能够区分ZIP和流中的其他文件。