Konverter en flottør til en byteoppstilling i Java

1. Oversikt

I denne raske opplæringen vil vi utforske noen få eksempler på bruk av Java til å konvertere en float til en byte-array og omvendt.

Dette er enkelt hvis vi konverterer en int eller en lang til en byte-array, da Java Bitwise-operatører bare fungerer på heltallstyper. For en flottør må vi imidlertid bruke et nytt konverteringslag.

For eksempel kan vi bruke API-er levert av Float klasse eller ByteBuffer klasse av java.nio pakke.

2. Float to Byte Array Conversion

Som vi vet er størrelsen på en flottør i Java 32 bit, noe som ligner på en int. Så vi kan bruke floatToIntBits eller floatToRawIntBits funksjonene som er tilgjengelige i Flyte klasse av Java. Og skift deretter bitene for å returnere et byte-utvalg. Klikk her for å lære mer om bitskiftende operasjoner.

Forskjellen mellom begge er floatToRawIntBits bevarer også Not-a-Number (NaN) verdier. Her har skifting av biter blitt gjort gjennom en teknikk som heter Narrowing Primitive Conversion.

La oss først se på koden med Float-klassefunksjon:

offentlig statisk byte [] floatToByteArray (float-verdi) {int intBits = Float.floatToIntBits (verdi); returner ny byte [] {(byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits)}; }

For det andre en fin måte å konvertere på ByteBuffer:

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

3. Byte Array to Float Conversion

La oss nå konvertere en byte-array til en flottør ved hjelp av Flyte klassefunksjon intBitsToFloat.

Vi må imidlertid først konvertere en byte-array til int-bits ved hjelp av venstre skift:

offentlig statisk flytebyteArrayToFloat (byte [] byte) (byte [1] & 0xFF) << 16 

Konvertering av en byte-array til en flottør ved hjelp av ByteBuffer er så enkelt som dette:

ByteBuffer.wrap (bytes) .getFloat (); 

4. Enhetstesting

La oss se på enkle enhetstestsaker for implementering:

offentlig ugyldig gittAFloat_thenConvertToByteArray () {assertArrayEquals (ny byte [] {63, -116, -52, -51}, floatToByteArray (1.1f)); } @Test offentlig ugyldig gittAByteArray_thenConvertToFloat () {assertEquals (1.1f, byteArrayToFloat (ny byte [] {63, -116, -52, -51}), 0); }

5. Konklusjon

Vi har sett forskjellige måter å flyte til byte-konvertering på og omvendt.

Flyte klasse gir funksjoner som en løsning for slik konvertering. Derimot, ByteBuffer gir en fin måte å gjøre dette på. Av denne grunn foreslår jeg at du bruker den der det er mulig.

Den komplette kildekoden til disse implementeringene og enhetstesttilfellene finner du i GitHub-prosjektet.