Menukar Java Longs kepada Byte dan Back
Apabila menghantar data melalui sambungan TCP, selalunya perlu menukar jenis data kepada tatasusunan bait untuk pemindahan yang cekap. Di Java, menukar panjang kepada bait[] dan kembali boleh dicapai melalui pelbagai kaedah.
Satu pendekatan ialah menggunakan kelas ByteBuffer. Dengan mencipta ByteBuffer dengan Long.BYTES (8 bait), anda boleh menyimpan nilai panjang menggunakan kaedah putLong() dan mendapatkan semula tatasusunan bait menggunakan kaedah tatasusunan(). Untuk menukar tatasusunan bait kembali kepada panjang, anda perlu mencipta satu lagi ByteBuffer, masukkan() tatasusunan bait ke dalamnya dan gunakan kaedah getLong() untuk mendapatkan nilai panjang.
Berikut ialah contoh:
<code class="java">public byte[] longToBytes(long x) { ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); buffer.putLong(x); return buffer.array(); } public long bytesToLong(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); buffer.put(bytes); buffer.flip(); // Ensure the buffer is ready for reading return buffer.getLong(); }</code>
Pendekatan lain ialah menggunakan kelas pembantu untuk mengelakkan penciptaan ByteBuffer berulang. Kelas ByteUtils di bawah merangkum kaedah penukaran, menghapuskan keperluan untuk mencipta berbilang ByteBuffers:
<code class="java">public class ByteUtils { private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); public static byte[] longToBytes(long x) { buffer.putLong(0, x); return buffer.array(); } public static long bytesToLong(byte[] bytes) { buffer.put(bytes, 0, bytes.length); buffer.flip(); return buffer.getLong(); } }</code>
Perlu diperhatikan bahawa terdapat juga perpustakaan seperti Guava yang menyediakan cara mudah untuk melakukan penukaran ini, mengurangkan keperluan untuk tersuai pelaksanaan. Walau bagaimanapun, pendekatan ini menawarkan kelebihan menangani kebimbangan endianness secara automatik, memastikan data dihantar dan ditafsirkan dengan betul tanpa mengira seni bina sistem asas.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar Java longs kepada bait dan kembali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!