Konvertáljon egy lebegő bájt tömböt Java-ban

1. Áttekintés

Ebben a gyors bemutatóban néhány példát tárunk fel arra, hogy a Java hogyan használható az úszó átalakítására bájt tömbvé és fordítva.

Ez egyszerű, ha egy int vagy egy long-ot bájt tömbökké konvertálunk, mivel a Java Bitwise operátorok csak egész típusú típusokon működnek. Az úszóhoz azonban egy másik konverziós réteget kell használnunk.

Például használhatjuk az által biztosított API-kat az Úszó osztály vagy ByteBuffer Osztálya java.nio csomag.

2. Float-byte Array konverzió

Mint tudjuk, az úszó mérete a Java-ban 32 bites, ami hasonló az int-hez. Tehát használhatjuk floatToIntBits vagy floatToRawIntBits a Úszó osztály Java. Ezután helyezze át a biteket egy bájt tömb visszaadásához. Kattintson ide, ha többet szeretne megtudni a biteltolás műveletekről.

A különbség mindkettő között az floatToRawIntBits megőrzi a Not-a-Number (NaN) értékeket is. Itt a bitek áthelyezése a Primitív konverzió szűkítése nevű technikán keresztül történt.

Először nézzük meg a Float class függvény kódját:

public static byte [] floatToByteArray (float value) {int intBits = Float.floatToIntBits (érték); adja vissza az új byte-ot [] {(byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits)}; }

Másodszor az átalakítás ügyes módja a ByteBuffer:

ByteBuffer.allocate (4) .putFloat (érték) .array ();

3. Bájt tömb lebegő konverzió

Konvertáljunk most egy bájt tömböt úszóvá a segítségével Úszó osztályfüggvény intBitsToFloat.

Először azonban egy bájt tömböt kell átalakítanunk int bitekké a bal váltás segítségével:

nyilvános statikus lebegő byteArrayToFloat (byte [] byte) (byte [1] & 0xFF) << 16 

A bájt tömb átalakítása úszóvá a ByteBuffer ilyen egyszerű:

ByteBuffer.wrap (byte) .getFloat (); 

4. Egység tesztelése

Nézzük meg a megvalósítás egyszerű egységtesztjeit:

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

5. Következtetés

Különböző módszereket láthattunk a lebegés bájtra történő átalakításra és fordítva.

Úszó osztály az ilyen átalakítás megoldásaként nyújt funkciókat. Azonban, ByteBuffer ügyes módot kínál erre. Ezért azt javaslom, ahol csak lehetséges.

Ezen megvalósítások és az egységtesztek teljes forráskódja megtalálható a GitHub projektben.


$config[zx-auto] not found$config[zx-overlay] not found