Ubah Float menjadi Byte Array di Java

1. Ikhtisar

Dalam tutorial singkat ini, kita akan menjelajahi beberapa contoh penggunaan Java untuk mengonversi float menjadi array byte dan sebaliknya.

Ini sederhana jika kita mengonversi larik int atau long menjadi byte karena Java Bitwise Operator hanya bekerja pada tipe integer. Namun, untuk float, kita perlu menggunakan lapisan konversi lain.

Misalnya, kita dapat menggunakan API yang disediakan oleh kelas Float atau kelas ByteBuffer dari paket java.nio .

2. Konversi Array Float ke Byte

Seperti yang kita ketahui, ukuran float di Java adalah 32 bit yang mirip dengan int. Jadi kita bisa menggunakan fungsi floatToIntBits atau floatToRawIntBits yang tersedia di kelas Float Java. Dan kemudian geser bit untuk mengembalikan array byte. Klik di sini untuk mempelajari lebih lanjut tentang operasi bit shifting.

Perbedaan antara keduanya adalah floatToRawIntBits mempertahankan nilai Not-a-Number (NaN) juga. Di sini menggeser bit telah dilakukan melalui teknik yang disebut Narrowing Primitive Conversion.

Pertama mari kita lihat kode 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 konversi yang rapi menggunakan ByteBuffer :

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

3. Konversi Byte Array ke Float

Sekarang mari kita ubah array byte menjadi float menggunakan fungsi kelas Float intBitsToFloat .

Namun, pertama-tama kita perlu mengubah array byte menjadi bit int menggunakan shift kiri:

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

Mengonversi array byte menjadi float menggunakan ByteBuffer sesederhana ini:

ByteBuffer.wrap(bytes).getFloat(); 

4. Pengujian Unit

Mari kita lihat kasus pengujian unit sederhana untuk implementasi:

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 berbagai cara untuk konversi float ke byte dan sebaliknya.

Kelas float menyediakan fungsi sebagai solusi untuk konversi tersebut. Namun, ByteBuffer menyediakan cara yang rapi untuk melakukan ini. Untuk alasan ini, saya menyarankan untuk menggunakannya sedapat mungkin.

Kode sumber lengkap dari implementasi ini dan kasus uji unit dapat ditemukan di proyek GitHub.