Java >> Java tutorial >  >> Tag >> byte

Konverter en Float til en Byte Array i Java

1. Oversigt

I denne hurtige vejledning vil vi udforske et par eksempler på brug af Java til at konvertere en float til en byte-array og omvendt.

Dette er enkelt, hvis vi konverterer en int eller en long til en byte-array, da Java Bitwise Operators kun virker på heltalstyper. Men for en float skal vi bruge et andet lag af konvertering.

For eksempel kan vi bruge API'er leveret af the Float klasse eller ByteBuffer klasse java.nio pakke.

2. Konvertering af flydende til byte-array

Som vi ved, er størrelsen af ​​en float i Java 32 bit, hvilket svarer til en int. Så vi kan bruge floatToIntBits eller floatToRawIntBits funktioner tilgængelige i Float klasse af Java. Og skift derefter bitsene for at returnere et byte-array. Klik her for at lære mere om bitskifteoperationer.

Forskellen mellem begge er floatToRawIntBits bevarer også Not-a-Number-værdier (NaN). Her er skift af bits blevet udført ved hjælp af en teknik kaldet Narrowing Primitive Conversion.

Lad os først se på koden med Float-klassefunktionen:

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) };
}

For det andet en pæn måde at konvertere ved hjælp af ByteBuffer :

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

3. Byte Array to Float-konvertering

Lad os nu konvertere en byte-array til en float ved hjælp af Float klassefunktion intBitsToFloat .

Vi skal dog først konvertere et byte-array til int-bits ved hjælp af venstre skift:

public static float byteArrayToFloat(byte[] bytes) {
    int intBits = 
      bytes[0] << 24 | (bytes[1] & 0xFF) << 16 | (bytes[2] & 0xFF) << 8 | (bytes[3] & 0xFF);
    return Float.intBitsToFloat(intBits);  
}

Konvertering af en byte-array til en float ved hjælp af ByteBuffer er så simpelt som dette:

ByteBuffer.wrap(bytes).getFloat();

4. Enhedstest

Lad os se på simple unit test cases til implementering:

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. Konklusion

Vi har set forskellige måder at konvertere float til byte på og omvendt.

Flyd klasse giver funktioner som en løsning for en sådan konvertering. Dog ByteBuffer giver en pæn måde at gøre dette på. Af denne grund foreslår jeg, at du bruger det, hvor det er muligt.

Den komplette kildekode for disse implementeringer og enhedstestcases kan findes i GitHub-projektet.


Java tag