Rumah >Java >javaTutorial >Menggunakan Teknik Pengesanan Ralat Pengisian Bit Java

Menggunakan Teknik Pengesanan Ralat Pengisian Bit Java

WBOY
WBOYke hadapan
2023-08-29 12:33:06858semak imbas

Menggunakan Teknik Pengesanan Ralat Pengisian Bit Java

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.

Contoh

sudah tentu! Berikut ialah contoh cara menggunakan kaedah bitStuff() dan bitUnStuff() dalam program mudah -
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.

Contoh

Untuk contoh data yang diberikan

rreeee

Output

Anda 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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam