【问题标题】:How to read content of .EXE file in Java如何在 Java 中读取 .EXE 文件的内容
【发布时间】:2011-05-03 17:53:30
【问题描述】:

在 Java 中读取可执行文件有哪些可能的选项和最合适的选项。

我想生成 .exe 文件的十六进制表示。我正在考虑以二进制文件读取文件,然后进行转换。但是我怎样才能读取 .exe?

【问题讨论】:

标签: java binary executable iostream


【解决方案1】:

Java 中的InputStream 是读取二进制文件的主要类。您可以使用FileInputStream 从文件中读取字节。然后,您可以使用 read() 方法读取每个字节,并根据需要将该字节显示为 2 个十六进制字符。

【讨论】:

    【解决方案2】:

    1) 以字节为单位读取文件。使用

    
       BufferedInputStream( new FileInputStream( new File("bin.exe") ) )
    

    2) 将每个字节转换为十六进制格式。

    
        static final String HEXES = "0123456789ABCDEF";
      public static String getHex( byte [] raw ) {
        if ( raw == null ) {
          return null;
        }
        final StringBuilder hex = new StringBuilder( 2 * raw.length );
        for ( final byte b : raw ) {
          hex.append(HEXES.charAt((b & 0xF0) >> 4))
             .append(HEXES.charAt((b & 0x0F)));
        }
        return hex.toString();
      }
    

    【讨论】:

    • 非常感谢,我想知道java是否可以处理可执行文件,现在很清楚了。感谢您加倍努力。
    • 每种编程语言都应该能够处理二进制格式。这样想吧。一切都以二进制形式表示。 0 和 1。因此,可以放心地假设一种编程语言可以读取 0 和 1 并将它们转换为简单的东西,例如十六进制。
    【解决方案3】:

    Java 的 Integer 类可以从二进制转换为十六进制字符串

    【讨论】:

    【解决方案4】:

    编辑
    我没想到你会想要它作为一个字符串。为此修改了示例。它的性能应该比使用 BufferedReader 稍微好一些,因为我们正在自己进行缓冲。

    public String binaryFileToHexString(final String path)
        throws FileNotFoundException, IOException
    {
        final int bufferSize = 512;
        final byte[] buffer = new byte[bufferSize];
        final StringBuilder sb = new StringBuilder();
    
        // open the file
        FileInputStream stream = new FileInputStream(path);
        int bytesRead;
    
        // read a block
        while ((bytesRead = stream.read(buffer)) > 0)
        {
            // append the block as hex
            for (int i = 0; i < bytesRead; i++)
            {
                sb.append(String.format("%02X", buffer[i]));
            }
        }
        stream.close();
    
        return sb.toString();
    }
    

    【讨论】:

    • 很好的回答伙伴,非常感谢。
    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多