【问题标题】:Reading Unix executable file读取 Unix 可执行文件
【发布时间】:2021-09-28 07:59:42
【问题描述】:

我有没有文件扩展名的“Unix 可执行文件”。 在 Mac 中,我可以在预览模式下查看内容,但不确定是否可以通过其他方式查看内容。

寻找一种方法来读取内容并以 JPG 文件或 PNG 文件格式存储在其他文件位置。

不知道如何通过 Java 阅读这篇文章。

在 Mac 终端中,我尝试了“文件文件名”并得到以下输出。

PNG 图像数据,110 x 103,8 位/彩色 RGB,非隔行扫描

【问题讨论】:

  • 如果是图像,则其文件可执行权限无关紧要。 This 可能会有一些用处。 ImageIO 类是您正在寻找的。如果它是一个图像文件,那么你的问题的标题并不完全合适。
  • 您是在问如何将文件上传到 S3?或者如何将您的 PNG 文件转换为 jpeg?或者如何重命名文件以使其具有正确的扩展名?
  • 问题是将 Unix 可执行文件转换为 PNG 文件。
  • 你说你可以在预览模式下看到内容。你在那里看到什么?截个图给我们看,因为将“Unix 可执行文件”转换为“PNG 文件”(即 image 文件)对我们没有任何意义。 Unix 可执行文件通常是二进制文件(显示为垃圾)或 shell 脚本(文本文件),它不是图像文件。
  • @JeffHolt 你的回答帮助了我。

标签: java unix


【解决方案1】:
  1. 无论报告“unix 可执行文件”,都过于简单化了。它只是一个“文件”(unix 与它有关),并且文件系统具有“可执行”标志的概念,您可以在任何文件上设置或清除它,并且与文件的内容是否完全无关可执行。您可以设置任何文件可执行或不执行,特别是考虑到例如macs 和 linux 可以挂载 DOS 文件系统(大多数 USB 记忆棒都使用它,因为每个操作系统都可以处理这些文件系统),它们没有这个标志,并且“为了方便”,这意味着操作系统就像所有文件都有这个标志一样,并且你不能删除它。换句话说,这是一个谎言,忘记那部分。

  2. file 只是猜测。这不是 file 的责任,该工具的作者绝不是懒惰的。这是数学上不可能 - 磁盘系统不知道一个文件包含什么样的数据,它只知道:这个文件有这些字节,并且到此结束。 file 只是看着内容,然后在黑暗中猛烈抨击。它的野刺是不错的,但不能保证。我可以为您制作一个 BOTH 合法的 zip 文件(unzip 并且一切都很好),AND 是一个同样出色的 PNG 图像(在浏览器中呈现,预览等)。 file 可能在这里告诉你什么?从字面上看,完全随机的垃圾ALSO 是一个有效的ISO-8859-1 格式的文本文件。要知道这显然不是文件的预期目的,唯一的方法是使用人工智能算法来实现内容绝不会以地球上任何语言形成清晰的单词。这是一个非常困难的问题,file 不会尝试解决它。​​

  3. 因此,如果您只有磁盘上的文件,没有真正的方法可以知道它是否是 PNG 文件。文件扩展名是一个很好的提示,但如果它丢失,你只是在猜测。你可以通过PNG阅读器把它扔掉,如果它没有崩溃,它可能是,但它可能只是一张带有随机静态的图片,因为它不是真正的PNG文件。

  4. 如果你想转换 PNG 文件,ImageIO 可以做到。

  5. 通常,获取该文件的过程通常确实知道格式。例如,如果您通过 Web 下载它,Web 服务器不会只发送这些字节。它还发送了这个标头:Content-Type: image/png(而不是文件扩展名)是网络服务器的规范真理。如果将该文件保存到磁盘的进程选择获取该信息并将其扔进垃圾箱,那么现在您只能猜测了。如果可能,请返回该过程的该部分并修复它,以便不再将这些信息扔进垃圾箱。例如,如果您有一个使用wget 下载资源的shell 脚本,然后您不知道它是PNG 还是JPG,或者HTML 中“找不到文件”说明页面的输出,然后修复 wget 以保存该标题并做出相应的反应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多