Konvertieren Sie ein Float in ein Byte-Array in Java

1. Übersicht

In diesem kurzen Tutorial werden einige Beispiele für die Verwendung von Java zum Konvertieren eines Floats in ein Byte-Array und umgekehrt erläutert.

Dies ist einfach, wenn wir ein int oder ein long in ein Byte-Array konvertieren, da Java Bitwise Operators nur für ganzzahlige Typen funktioniert. Für einen Float müssen wir jedoch eine andere Konvertierungsebene verwenden.

Beispielsweise können wir APIs verwenden, die von der Float- Klasse oder der ByteBuffer- Klasse des Pakets java.nio bereitgestellt werden.

2. Float to Byte Array-Konvertierung

Wie wir wissen, beträgt die Größe eines Floats in Java 32 Bit, was einem Int ähnelt. Wir können also die Funktionen floatToIntBits oder floatToRawIntBits verwenden, die in der Float- Klasse von Java verfügbar sind . Verschieben Sie dann die Bits, um ein Byte-Array zurückzugeben. Klicken Sie hier, um mehr über Bitverschiebungsvorgänge zu erfahren.

Der Unterschied zwischen beiden besteht darin, dass floatToRawIntBits auch NaN-Werte (Not-a-Number) beibehält . Hier wurde das Verschieben der Bits durch eine Technik namens Narrowing Primitive Conversion durchgeführt.

Schauen wir uns zunächst den Code mit der Float-Klassenfunktion an:

public static byte[] floatToByteArray(float value) { int intBits = Float.floatToIntBits(value); return new byte[] { (byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits) }; }

Zweitens eine nette Art der Konvertierung mit ByteBuffer :

ByteBuffer.allocate(4).putFloat(value).array();

3. Konvertierung von Byte-Array in Float

Lassen Sie uns nun ein Byte-Array mit der Float- Klassenfunktion intBitsToFloat in ein Float konvertieren .

Wir müssen jedoch zuerst ein Byte-Array mit der Linksverschiebung in int-Bits konvertieren:

public static float byteArrayToFloat(byte[] bytes)  (bytes[1] & 0xFF) << 16 

Das Konvertieren eines Byte-Arrays in ein Float mit ByteBuffer ist so einfach:

ByteBuffer.wrap(bytes).getFloat(); 

4. Unit Testing

Schauen wir uns einfache Unit-Testfälle für die Implementierung an:

public void givenAFloat_thenConvertToByteArray() { assertArrayEquals(new byte[] { 63, -116, -52, -51}, floatToByteArray(1.1f)); } @Test public void givenAByteArray_thenConvertToFloat() { assertEquals(1.1f, byteArrayToFloat(new byte[] { 63, -116, -52, -51}), 0); }

5. Schlussfolgerung

Wir haben verschiedene Arten der Umwandlung von Float in Byte gesehen und umgekehrt.

Die Float- Klasse bietet Funktionen als Problemumgehung für eine solche Konvertierung. Allerdings ByteBuffer bietet eine nette Art und Weise , dies zu tun. Aus diesem Grund empfehle ich, es wo immer möglich zu verwenden.

Den vollständigen Quellcode dieser Implementierungen und Unit-Testfälle finden Sie im GitHub-Projekt.