Preveďte float na bajtové pole v Jave

1. Prehľad

V tomto rýchlom návode preskúmame niekoľko príkladov použitia Javy na prevod float na bajtové pole a naopak.

To je jednoduché, ak konvertujeme int alebo long na bajtové pole, pretože Java Bitwise Operators funguje iba na celočíselných typoch. Pre plavák však musíme použiť inú vrstvu premeny.

Môžeme napríklad použiť API poskytované serverom plavák triedy príp ByteBuffer trieda java.nio balíček.

2. Premena float to byte array

Ako vieme, veľkosť plaváka v Jave je 32 bitov, čo je podobné ako v prípade int. Môžeme teda použiť floatToIntBits alebo floatToRawIntBits funkcie dostupné v Plavák trieda Java. A potom posunutím bitov vráťte bajtové pole. Kliknite sem a dozviete sa viac o operáciách radenia bitov.

Rozdiel medzi oboma je floatToRawIntBits zachováva aj hodnoty Not-a-Number (NaN). Tu sa radenie bitov uskutočňovalo technikou nazvanou Narrowing Primitive Conversion.

Najprv sa pozrime na kód s funkciou Float class:

public static byte [] floatToByteArray (float value) {int intBits = Float.floatToIntBits (value); vrátiť nový bajt [] {(bajt) (intBits >> 24), (bajt) (intBits >> 16), (bajt) (intBits >> 8), (bajt) (intBits)}; }

Po druhé, úhľadný spôsob konverzie pomocou ByteBuffer:

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

3. Byte Array to Float Conversion

Poďme teraz previesť bajtové pole na float pomocou Plavák triedna funkcia intBitsToFloat.

Potrebujeme však najskôr konvertovať bajtové pole na int bity pomocou ľavého posunu:

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

Prevod bajtového poľa na float pomocou ByteBuffer je také jednoduché ako toto:

ByteBuffer.wrap (bytes) .getFloat (); 

4. Testovanie jednotky

Pozrime sa na jednoduché prípady testovania jednotiek pre implementáciu:

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

5. Záver

Videli sme rôzne spôsoby konverzie typu float to byte a naopak.

Plavák trieda poskytuje funkcie ako riešenie tejto konverzie. Avšak ByteBuffer poskytuje čistý spôsob, ako to dosiahnuť. Z tohto dôvodu navrhujem používať ho všade, kde je to možné.

Kompletný zdrojový kód týchto implementácií a testovacích prípadov jednotiek nájdete v projekte GitHub.