Hallo zusammen,
ich stehe bei der Implementierung einer Kommunikationsschnittstelle vor einem interessanten Problem:
Ich möchte eine große Menge von Bytes gegen eine kleine Menge unzulässiger Bytes prüfen. Da ich mir die Große Menge (mehrere Megabyte) gebuffert von einem Server hole, habe ich zwei Byte-Arrays in der Hand. Natürlich könnte ich jedes Byte einzeln prüfen, aber ich suche nach einer CPU freundlicheren Möglichkeit.
Ich weiß, dass java.util.Collection#retainAll(Collection c) so etwas bereits kann, aber da ich hochperformant bleiben will, möchte ich auf der Array-Ebene bleiben. Auch die Arrays.binarySearch(...)-Methoden scheinen nicht das Richtige zu sein.
Ein Beispiel mit mit der Methode, die mir zu umständlich ist (bei nur einem Megabyte sind es über 30 Millionen abfragen):
Ich bin gespannt auf eure Vorschläge!
Ralf
ich stehe bei der Implementierung einer Kommunikationsschnittstelle vor einem interessanten Problem:
Ich möchte eine große Menge von Bytes gegen eine kleine Menge unzulässiger Bytes prüfen. Da ich mir die Große Menge (mehrere Megabyte) gebuffert von einem Server hole, habe ich zwei Byte-Arrays in der Hand. Natürlich könnte ich jedes Byte einzeln prüfen, aber ich suche nach einer CPU freundlicheren Möglichkeit.
Ich weiß, dass java.util.Collection#retainAll(Collection c) so etwas bereits kann, aber da ich hochperformant bleiben will, möchte ich auf der Array-Ebene bleiben. Auch die Arrays.binarySearch(...)-Methoden scheinen nicht das Richtige zu sein.
Ein Beispiel mit mit der Methode, die mir zu umständlich ist (bei nur einem Megabyte sind es über 30 Millionen abfragen):
Java:
public class InvalidByteChecker {
// Die invaliden Bytes (in meinem Fall 29 Stück)
private static byte[] _invalidBytes;
public static void initInvalidBytes() {
// _invalidBytes Array Füllen
}
// Die Methode, die für jeden geladenen Buffer aufgerufen werden soll
public static boolean allBytesValid(byte[] pBytes2Check) {
for (byte b2c : pBytes2Check) {
for (byte ib : _invalidBytes) {
// Sobald ein invalides Byte vorkommt brauche ich gar nicht
// weiter zu machen
if (b2c == ib)
return false;
}
}
return true;
}
}
Ich bin gespannt auf eure Vorschläge!
Ralf