Konverter en float til en byte-array i Java
1. Oversigt
I denne hurtige vejledning udforsker vi et par eksempler på brug af Java til at konvertere en float til et byte-array og omvendt.
Dette er simpelt, hvis vi konverterer en int eller en lang til et byte-array, da Java Bitwise Operators kun fungerer på heltalstyper. For en float er vi dog nødt til at bruge et andet konverteringslag.
For eksempel kan vi bruge API'er leveret af flyderen klasse eller ByteBuffer klasse af java.nio pakke.
2. Konvertering af flyde til byte-array
Som vi ved, er størrelsen på en float i Java 32 bit, hvilket svarer til et int. Så vi kan bruge floatToIntBits eller floatToRawIntBits tilgængelige funktioner i Flyde klasse af Java. Og skift derefter bitene for at returnere et byte-array. Klik her for at lære mere om bitskiftende operationer.
Forskellen mellem begge er floatToRawIntBits bevarer også Not-a-Number (NaN) værdier. Her er skift af bits blevet gjort gennem en teknik kaldet Narrowing Primitive Conversion.
Lad os først se koden med Float-klassefunktion:
offentlig statisk byte [] floatToByteArray (float værdi) {int intBits = Float.floatToIntBits (værdi); returner ny byte [] {(byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits)}; }
For det andet en pæn måde at konvertere på ByteBuffer:
ByteBuffer.allocate (4) .putFloat (værdi) .array ();
3. Byte Array to Float-konvertering
Lad os nu konvertere et byte-array til en float ved hjælp af Flyde klassefunktion intBitsToFloat.
Vi skal dog først konvertere et byte-array til int-bits ved hjælp af venstre skift:
offentlig statisk floatbyteArrayToFloat (byte [] bytes) (bytes [1] & 0xFF) << 16
Konvertering af et 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å enkle testtestsager til implementering:
offentlig ugyldig givenAFloat_thenConvertToByteArray () {assertArrayEquals (ny byte [] {63, -116, -52, -51}, floatToByteArray (1.1f)); } @Test offentlig ugyldighed givetAByteArray_thenConvertToFloat () {assertEquals (1.1f, byteArrayToFloat (ny byte [] {63, -116, -52, -51}), 0); }
5. Konklusion
Vi har set forskellige måder at flyde til byte-konvertering på og omvendt.
Flyde klasse giver funktioner som en løsning på en sådan konvertering. Imidlertid, ByteBuffer giver en pæn måde at gøre dette på. Af denne grund foreslår jeg at bruge det, hvor det er muligt.
Den komplette kildekode til disse implementeringer og enhedstestsager kan findes i GitHub-projektet.