M
Matze007
Gast
Hallo,
ich möchte eine große Datei(>200MB) einlesen und dann eine"Prüfsumme" bilden:
Das soll so ablaufen, dass 16Byte Blöcke mit XOR verknüpft werden.
Also der erste 16Byte Block mit dem zweiten 16Byte Block und das Ergbnis wieder mit dem nächsten(dritten) 16 Byte Block usw.
Ich habe auch schon mal ein Programm geschrieben, ich bin aber noch nicht mit der Geschwindigkeit zufrieden. Über Ideen wie ich das schneller machbar ist würde ich mich sehr freuen!! Hier mein Programm:
Danke schon mal vorab!
ich möchte eine große Datei(>200MB) einlesen und dann eine"Prüfsumme" bilden:
Das soll so ablaufen, dass 16Byte Blöcke mit XOR verknüpft werden.
Also der erste 16Byte Block mit dem zweiten 16Byte Block und das Ergbnis wieder mit dem nächsten(dritten) 16 Byte Block usw.
Ich habe auch schon mal ein Programm geschrieben, ich bin aber noch nicht mit der Geschwindigkeit zufrieden. Über Ideen wie ich das schneller machbar ist würde ich mich sehr freuen!! Hier mein Programm:
Code:
import java.io.*;
public class Xor{
public static void main(String[] args){
long start = System.currentTimeMillis();
int nbytes;
byte[] feld = new byte[16];
byte[] hilf = new byte[16];
byte[] hilf2 = new byte[16];
int pos=0;
try{
File ein = new File(args[0]);
long laenge = ein.length();
int n16 = (int)(laenge/16); //Anzahl volle 16Byte -Blöcke
int rest = (int)(laenge-n16*16);
FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bis = new BufferedInputStream(fis);
while((nbytes=bis.read(hilf))!=-1){
if(n16>0){
for(int i=0; i<nbytes; i++){
pos = i%16;
feld[pos]= (byte)(feld[pos]^hilf[i]);
pos++;
}
}
else {
System.arraycopy(hilf,0,hilf2,0,rest);
for(int i=0;i<rest;i++){
feld[i]=(byte)(feld[i]^hilf2[i]);
System.out.println("i "+i);
}
break;
}
n16--;
}
fis.close();
bis.close();
}
catch (Exception e) {}
long end = System.currentTimeMillis();
System.out.println("Zeit= "+(end-start));
StringBuffer sb = new StringBuffer("");
for(int i=0; i<feld.length;i++){
int q = feld[i];
sb.append(Integer.toHexString(q));
}
System.out.println("Ergenis= "+sb);
}
}
Danke schon mal vorab!