Pemadat bit ialah teknik yang digunakan dalam sistem komunikasi data untuk mengesan dan membetulkan ralat yang mungkin berlaku semasa penghantaran data. Ia berfungsi dengan menambah bit tambahan pada data yang dihantar ke ralat bendera apabila ia berlaku.
Cara biasa untuk melaksanakan pemadat bit dalam Java ialah menggunakan bait bendera (seperti 0x7E) untuk menunjukkan permulaan dan akhir bingkai, dan bait pelarian khas (seperti 0x7D) untuk menunjukkan bahawa bait bingkai seterusnya ialah bit padding . Sebagai contoh, pengirim akan menambah bit padding sebelum setiap kejadian bait bendera dalam data yang dihantar supaya bait bendera tidak disalah anggap sebagai permulaan atau akhir bingkai pada penerima.
Berikut ialah contoh cara melaksanakan pemadat bit dalam Java -
public static byte[] bitStuff(byte[] data) { final byte FLAG = 0x7E; final byte ESCAPE = 0x7D; // Create a new byte array to store the stuffed data byte[] stuffedData = new byte[data.length * 2]; // Keep track of the current index in the stuffed data array int stuffedIndex = 0; // Iterate through the original data for (int i = 0; i < data.length; i++) { byte b = data[i]; // If the current byte is the flag or escape byte, stuff it if (b == FLAG || b == ESCAPE) { stuffedData[stuffedIndex++] = ESCAPE; stuffedData[stuffedIndex++] = (byte) (b ^ 0x20); } else { stuffedData[stuffedIndex++] = b; } } return stuffedData; }
Di bahagian penerima, anda boleh menggunakan konsep yang sama untuk mendapatkan semula data mentah.
public static byte[] bitUnStuff(byte[] data) { final byte FLAG = 0x7E; final byte ESCAPE = 0x7D; // Create a new byte array to store the unstuffed data byte[] unstuffedData = new byte[data.length]; // Keep track of the current index in the unstuffed data array int unstuffedIndex = 0; // Iterate through the stuffed data for (int i = 0; i < data.length; i++) { byte b = data[i]; // If the current byte is the escape byte, unstuff the next byte if (b == ESCAPE) { unstuffedData[unstuffedIndex++] = (byte) (data[++i] ^ 0x20); } else { unstuffedData[unstuffedIndex++] = b; } } return unstuffedData; }
Ini adalah contoh asas teknik pemadat bit, ia boleh dipertingkatkan untuk mengendalikan lebih banyak kes ralat dan mengesahkan data menggunakan CRC atau checksum.
public static void main(String[] args) { byte[] data = {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x7E}; // Hello~ byte[] stuffedData = bitStuff(data); System.out.println("Original Data: "+Arrays.toString(data)); System.out.println("Stuffed Data: "+ Arrays.toString(stuffedData)); byte[] unstuffedData = bitUnStuff(stuffedData); System.out.println("Unstuffed Data: "+ Arrays.toString(unstuffedData)); }
Apabila anda menjalankan program ini, ia akan memanggil kaedah bitStuff() terlebih dahulu untuk mengisi data asal, dan kemudian mencetak data asal dan data yang diisi.
Kemudian ia akan memanggil kaedah bitUnStuff() untuk mendapatkan semula data asal, kemudian ia akan mencetak data yang tidak disumbat.
Untuk contoh data yang diberikan
rreeeeAnda akan mendapat output
0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x7E,
Anda dapat melihat bahawa data padding mempunyai satu bait lagi 93, 30, iaitu versi padding 7E.
Anda juga boleh melihat bahawa data yang tidak diisi adalah sama dengan data asal, yang mengesahkan bahawa data itu berjaya diambil tanpa sebarang ralat.
Atas ialah kandungan terperinci Menggunakan Teknik Pengesanan Ralat Pengisian Bit Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!