Konvertieren von Long in ein Byte-Array und zurück in Java
In Java Konvertieren eines langen primitiven Datentyps in ein Byte-Array (Byte[] ) und umgekehrt ist eine häufige Aufgabe für verschiedene Vorgänge, beispielsweise das Senden von Daten über eine TCP-Verbindung. Hier ist eine umfassende Lösung, um diese Konvertierung zu erreichen:
Long to Byte Array
public byte[] longToBytes(long x) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(x);
return buffer.array();
}
Diese Methode verwendet die ByteBuffer-Klasse, um einen Puffer der Größe Long.BYTES zu erstellen. Dies ist die Anzahl der Bytes, die zur Darstellung eines Long-Werts erforderlich sind. Die putLong()-Methode wird verwendet, um den Long-Wert in den Puffer zu schreiben, und die array()-Methode gibt das zugrunde liegende Byte-Array zurück, das den Long-Wert darstellt.
Byte-Array zu Long
public long bytesToLong(byte[] bytes) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.put(bytes);
buffer.flip(); // Flip the buffer to prepare for reading
return buffer.getLong();
}
Um das Byte-Array zurück in ein Long-Array zu konvertieren, wird ein neuer ByteBuffer erstellt und mit dem angegebenen Byte-Array geladen. Die Methode flip() wird verwendet, um den Puffer zum Lesen bereit zu machen. Schließlich liest die Methode getLong() den Long-Wert aus dem Puffer.
Kapselung in einer Hilfsklasse
Der Einfachheit halber können die Konvertierungsmethoden in einem Dienstprogramm gekapselt werden Klasse:
public class ByteUtils {
private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
public static byte[] longToBytes(long x) {
buffer.putLong(0, x);
return buffer.array();
}
public static long bytesToLong(byte[] bytes) {
buffer.put(bytes, 0, bytes.length);
buffer.flip(); // Flip the buffer to prepare for reading
return buffer.getLong();
}
}
Diese Dienstprogrammklasse bietet eine einfache Möglichkeit, die Konvertierung durchzuführen, ohne jedes Mal ByteBuffer-Instanzen erstellen und verwalten zu müssen.
Überlegungen zu Endianness
Hinweis dass die ByteBuffer-Klasse die native Endianness des Systems verwendet. Wenn plattformübergreifende Kompatibilität erforderlich ist, sind möglicherweise zusätzliche Überlegungen zum Umgang mit Endianness erforderlich.
Alternative Lösung: Verwendung von Bibliotheken
Während die oben bereitgestellten nativen Java-Lösungen ausreichend sind, Sie können in bestimmten Szenarien mühsam werden. Erwägen Sie bei komplexen oder erweiterten Datenkonvertierungsanforderungen die Verwendung einer Bibliothek wie Guava oder Apache Commons, die umfassendere und effizientere Lösungen bieten.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3