如何在Java中阅读.EXE文件的内容

时间:2010-11-02 03:10:34

标签: java binary executable iostream

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

我想生成.exe文件的十六进制表示。我想用二进制文件读取文件,然后进行转换。但是我如何阅读.exe?

4 个答案:

答案 0 :(得分:5)

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();
  }

答案 1 :(得分:2)

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

答案 2 :(得分:2)

修改
我没想到你想要它作为一个字符串。修改了这样做的例子。它应该比使用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();
}

答案 3 :(得分:-1)

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