Es gibt Arrays.equals ().
Ich weiß nicht, ob die JVM-Implementierung dies tatsächlich optimiert, wenn ein entsprechender Befehl in der Hardware existiert, aber ich bezweifle es.
Auch, wenn ich mich richtig an C erinnere, arbeitet strcmp mit einem Null-Terminator (was für C-Strings nützlich ist). Die Array-Version vergleicht das gesamte Array, da Java-Programmierer sich selten mit nullterminierten Arrays befassen. Sie können jedoch leicht Ihre eigene Funktion schreiben, wenn Sie sich für den Null-Terminator interessieren.
Memcmp gibt einen int, kleiner als, gleich oder größer als null zurück, wenn die ersten n Bytes von s1 jeweils kleiner als, passend oder größer als die ersten n Bytes von s2 sind. Equals gibt einen booleschen Wert zurück. Es ist nicht die gleiche Funktion. Darüber hinaus vergleicht Memcmp Bytes als unsigned Zeichen.
Ich denke, das könnte funktionieren:
%Vor%(bearbeiten) In der Tat ist der Zweierkomplementteil nicht notwendig:
%Vor%Die java.util.Arrays.equals (byte [], byte []) Methode ist dein Freund.
Nun, Arrays.equals()
ist gut, aber kann Unterbereiche nicht vergleichen. In diesem Fall gibt es auch einen Pfad durch Arrays.listOf()
und später .subList()
, aber nicht für Grundelemente wie byte[]
.
Tatsächlich gibt es kein direktes memcmp()
Äquivalent. Hier ist Diskussion und sobald ich weiß, ist es im selben Zustand (15 Jahre) ). Die meisten 'nativen' Implementierungen könnten durch meine Option über java.nio.ByteBuffer
( wrap()
method und dann equals()
) erreicht werden. Aber es ist etwas viel Code.
Für Leute, die das Thema völlig nicht verstehen: memcmp()
ist plattformabhängig implementiert, was sehr effizient ist und nichts in Java, das sich ihm nähert. Alle manuellen Zyklen sind mindestens aufgrund der Indexbereichsüberprüfungen in Bezug auf die Leistung weit entfernt. Vielleicht werden eines Tages Leute, die von embedded C / C ++ kommen, zu diesem Thema zufrieden sein :-).