Как читать содержимое .EXE файла в Java - PullRequest
2 голосов
/ 02 ноября 2010

Каковы возможные варианты и наиболее подходящие для чтения исполняемого файла в Java.

Я хочу произвести шестнадцатеричное представление файла .exe.Я думаю о чтении файла в двоичном формате, а затем делать преобразование.Но как я могу прочитать .exe?

Ответы [ 4 ]

5 голосов
/ 02 ноября 2010

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();
  }
2 голосов
/ 02 ноября 2010

Редактировать
Мне не пришло в голову, что вы захотите это как строка.Модифицированный пример для этого.Он должен работать немного лучше, чем 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();
}
2 голосов
/ 02 ноября 2010

InputStream в Java является основным классом для чтения двоичных файлов.Вы можете использовать FileInputStream для чтения байтов из файла.Затем вы можете читать каждый байт методом read() и отображать этот байт как 2 шестнадцатеричных символа, если хотите.

0 голосов
/ 02 ноября 2010

Класс Integer Java может преобразовывать двоичную в шестнадцатеричную строку

...