【问题标题】:Magic number file checking幻数文件检查
【发布时间】:2011-08-21 03:43:22
【问题描述】:

我正在尝试读取幻数/字节来检查文件的格式。在 Linux 机器上逐字节读取文件的工作方式是否相同?

编辑:以下显示使用 int 从类文件中获取魔术字节。我正在尝试对可变数量的字节做同样的事情。

http://www.rgagnon.com/javadetails/java-0544.html

【问题讨论】:

标签: java cross-platform magic-numbers


【解决方案1】:

我不确定我是否理解您要执行的操作,但听起来您要执行的操作与您链接的代码正在执行的操作不同。

java 类格式被指定为以幻数开头,因此代码只能用于验证文件是否可能是 java 类。您不能使用相同的逻辑并将其应用于任意文件格式。

编辑:.. 还是您只想检查 wav 文件?

Edit2:Java 中的一切都是大端序,也就是说你可以使用 DataInputStream.readInt 从文件中读取前四个字节,然后将返回的 int 与 0x52494646(RIFF 作为大端序整数)进行比较

【讨论】:

  • 链接中的checkClassVersion 方法仅限于检查Java 类文件。可以通过读取字节并转换/检查 Hex/ASCII 值以类似的方式检查其他文件格式(我不久前设法做到了这一点,但当 HDD 发生故障时丢失了源)。下面的这个页面给出了可能的文件签名列表,因为它们被称为。字节序http://www.garykessler.net/library/file_sigs.html
  • 是的,但这意味着文件必须以魔术字节开头,或者所有文件格式都这样做。
  • 我意识到了这一点,并打算在未来为另一个项目制作更灵活的方法。同时,我要检查的所有文件格式(wav、mp3、flv ...)都在文件的开头有它们的魔法字节。如果处理器或虚拟机使用不同的字节顺序,字节顺序就会成为问题。
  • 查看我的第二次编辑和 DataInputStream。字节序是在 Java 中指定的,不应该是特定于平台的。
  • 另一种选择是使用 ByteBuffer 和 ByteOrder。如果这是你想要的,你可以指定 little Indian。您也可以使用这些类进行转换。
猜你喜欢
  • 2011-02-10
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2020-11-16
  • 2018-04-10
  • 1970-01-01
相关资源
最近更新 更多