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

如何在Java中读取.EXE文件的内容,java,binary,executable,iostream,Java,Binary,Executable,Iostream,在Java中读取可执行文件的可能选项和最合适的方法是什么 我要生成.exe文件的十六进制表示形式。我正在考虑用二进制文件读取文件,然后进行转换。但是如何读取.exe呢?Java中的InputStream是读取二进制文件的主要类。您可以使用FileInputStream从文件中读取字节。然后,您可以使用read()方法读入每个字节,并根据需要将该字节显示为2个十六进制字符。1)以字节形式读入文件。使用 BufferedInputStream( new FileInputStream( ne

在Java中读取可执行文件的可能选项和最合适的方法是什么


我要生成.exe文件的十六进制表示形式。我正在考虑用二进制文件读取文件,然后进行转换。但是如何读取.exe呢?

Java中的
InputStream
是读取二进制文件的主要类。您可以使用
FileInputStream
从文件中读取字节。然后,您可以使用
read()
方法读入每个字节,并根据需要将该字节显示为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的Integer类可以从二进制字符串转换为十六进制字符串 我没想到你想把它当作一根绳子。修改示例以实现此目的。它的性能应该比使用
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();
}
公共字符串binaryFileToHexString(最终字符串路径)
抛出FileNotFoundException,IOException
{
最终int bufferSize=512;
最终字节[]缓冲区=新字节[bufferSize];
最终StringBuilder sb=新StringBuilder();
//打开文件
FileInputStream=新的FileInputStream(路径);
int字节读取;
//读一段
而((bytesRead=stream.read(buffer))>0)
{
//将块附加为十六进制
for(int i=0;i
我不确定我是否明白。你想重现标准十六进制编辑器的功能吗?@Kirk:不太想,这个问题与之相关。非常感谢你,伙计,我最想知道的是java是否能处理可执行文件,这一点现在已经很清楚了。谢谢你的努力。每种编程语言都应该能够处理二进制格式。这样想吧。一切都以二进制形式表示。0和1。因此,我们可以放心地假设一种编程语言可以读取0和1,并将它们转换为简单的十六进制。回答得好,伙计,非常感谢。对那些否决我的白痴们:好了。那些“白痴”可能会说,你没有提供这个问题的完整答案。仅通过integer类转换将单个整数值转换为字符串,而不是整个文件。