Okay danke hab ich gemacht. Übrigends beide Methoden sind ungefähr gleich schnell (unterscheided sich nur in Millisekunden). Jedoch zeigt mir leider die NIO Methode 400 Zeilen zu wenig an. An was könnte das liegen?
Nochmal meine neue Funktion:
[code=Java]BufferedInputStream bis = null;
FileInputStream fis = null;
try {
bis = new BufferedInputStream(new FileInputStream(file));
/*
* Java NIO
*/
fis = new FileInputStream(file);
FileChannel fileChannel = fis.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(201);
int bytes = fileChannel.read(byteBuffer);
while (bytes != -1) {
byteBuffer.flip();
dataNew.put(byteBuffer.asReadOnlyBuffer().duplicate().position(0).limit(59), byteBuffer.asReadOnlyBuffer().duplicate().position(60).limit(201));
byteBuffer.clear();
bytes = fileChannel.read(byteBuffer);
}
if (fis != null) {
fis.close();
}
System.out.println(dataNew.size());[/code]
Die Methode die doppelte Einträge checkt habe ich übrigends so modifiziert :
[code=Java] if(currData.size() > lastData.size()) {
Map<Buffer, Buffer> temp = currData;
currData = lastData;
currData = temp;
}
for (Entry<Buffer, Buffer> dataFromMap1 : currData.entrySet()) {
Buffer key = lastData.get(dataFromMap1.getKey());
Buffer value = lastData.get(dataFromMap1.getValue());
if(key != null){
if(value != null){
break;
}else{
zaehlerChanges ++;
}
}else{
zaehlerNew ++;
}
}[/code]
Werde diese Methode auch noch etwas optimieren, da auch diese nicht alle Werte richtig ausgibt.