Tukarkan Float ke Array Byte di Java

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan meneroka beberapa contoh penggunaan Java untuk menukar float menjadi array byte dan sebaliknya.

Ini mudah jika kita menukar int atau panjang menjadi array byte kerana Java Bitwise Operators hanya berfungsi pada jenis bilangan bulat. Namun, untuk pengapungan, kita perlu menggunakan lapisan penukaran yang lain.

Sebagai contoh, kita boleh menggunakan API disediakan oleh Float kelas atau ByteBuffer kelas java.nio pakej.

2. Terapung ke Penukaran Array Byte

Seperti yang kita ketahui, ukuran float di Java adalah 32 bit yang serupa dengan int. Oleh itu, kita boleh menggunakan fungsi floatToIntBits atau floatToRawIntBits yang terdapat di kelas Float Java. Dan kemudian beralih bit untuk mengembalikan tatasusunan bait. Klik di sini untuk mengetahui lebih lanjut mengenai operasi pemindahan bit.

Perbezaan antara keduanya ialah floatToRawIntBits mengekalkan nilai Not-a-Number (NaN) juga. Di sini peralihan bit telah dilakukan melalui teknik yang disebut Narrowing Primitive Conversion.

Pertama mari kita lihat kod dengan fungsi kelas Float:

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

Kedua cara penukaran yang kemas menggunakan ByteBuffer :

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

3. Penukaran Byte Array to Float

Sekarang mari kita menukar susunan bait menjadi apungan menggunakan fungsi kelas Float intBitsToFloat .

Walau bagaimanapun, kita perlu menukar susunan bait terlebih dahulu menjadi int bit menggunakan pergeseran kiri:

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

Menukar array byte menjadi apungan menggunakan ByteBuffer semudah ini:

ByteBuffer.wrap(bytes).getFloat(); 

4. Ujian Unit

Mari lihat kes ujian unit mudah untuk pelaksanaan:

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

Kami telah melihat pelbagai cara penukaran float to byte dan sebaliknya.

Float class menyediakan fungsi sebagai jalan penyelesaian untuk penukaran tersebut. Walau bagaimanapun, ByteBuffer menyediakan cara yang rapi untuk melakukan ini. Atas sebab ini, saya cadangkan menggunakannya sedapat mungkin.

Kod sumber lengkap pelaksanaan ini dan kes ujian unit boleh didapati di projek GitHub.