Hallo, ich habe ein kleines Problem.
Ich möchte gerne eine exe-Datei Byteweise auslesen und diese Bytes in Hex-Form in ein String bringen.
Das ganze funktionierte in C# ganz gut, hier mein Ansatz von C#:
ByteToString sieht wie folgt aus:
Soo das läuft in wenigen Sekunden durch, alles kein Problem - Nun wollte ich das gleiche in Java hinbekommen.
ByteToString:
und padLeft:
Das dauert aber Stunden bis die Exe geladen ist - Was mich auch nicht wundert, sind immerhin 6 GB^^
Die Exe muss ich allerdings mit regex nach Inhalten durchsuchen und in C# klappt das ganze Wunderbar.
Vll habt ihr ja eine Ahnung, wie man das ganze schneller machen kann und wo da mein Problem liegen könnte.
(Ich denke es ist beim umwandeln zum String zu langsam... Den fis.read(buf) ; läuft recht schnell durch)
Noch einen schönen Abend
PS:
Noch eine kleine Ergänzung:
Die ersten Zeichen des Strings sehen bei Java wie folgt aus:
4d5affffffffffffff90000300000004000000
bei dem C# Programm allerdings
4d5a90000300000004000000
Wo kommen die ffffffffs her? Jemand eine Idee?^^
Ich möchte gerne eine exe-Datei Byteweise auslesen und diese Bytes in Hex-Form in ein String bringen.
Das ganze funktionierte in C# ganz gut, hier mein Ansatz von C#:
Code:
byte[] exeByte = System.IO.File.ReadAllBytes("meineExe.exe");
string exe_s = ByteToString(exeByte);
ByteToString sieht wie folgt aus:
Code:
private string ByteToString(byte[] ByteArray)
{
System.Text.StringBuilder sb = new StringBuilder();
foreach (byte b in ByteArray)
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
return sb.ToString();
}
Soo das läuft in wenigen Sekunden durch, alles kein Problem - Nun wollte ich das gleiche in Java hinbekommen.
Code:
File file = new File(filename) ;
long size = file.length() ;
byte[] buf = new byte[(int)size] ;
FileInputStream fis = new FileInputStream(file);
fis.read(buf) ;
String exe = ByteToString(buf);
ByteToString:
Code:
String sb = "";
for(byte b : ByteArray)
{
sb += padLeft(Long.toHexString(b), 2, "0");
System.out.print(padLeft(Long.toHexString(b), 2, "0"));
}
return sb;
und padLeft:
Code:
public static String padLeft(String s, int n, String form) {
if(s.length() >= n)
return s;
int len = n - s.length();
String f = "";
for(int i = 0; i < len; i++)
{
f += form;
}
return f+s;
}
Die Exe muss ich allerdings mit regex nach Inhalten durchsuchen und in C# klappt das ganze Wunderbar.
Vll habt ihr ja eine Ahnung, wie man das ganze schneller machen kann und wo da mein Problem liegen könnte.
(Ich denke es ist beim umwandeln zum String zu langsam... Den fis.read(buf) ; läuft recht schnell durch)
Noch einen schönen Abend
PS:
Noch eine kleine Ergänzung:
Die ersten Zeichen des Strings sehen bei Java wie folgt aus:
4d5affffffffffffff90000300000004000000
bei dem C# Programm allerdings
4d5a90000300000004000000
Wo kommen die ffffffffs her? Jemand eine Idee?^^
Zuletzt bearbeitet: