Dekoder Protocol Buffers

Langkah 1 / 333%

Periksa pesan Protocol Buffers yang telah dienkode tanpa mengunggahnya atau berpura-pura mengetahui skemanya. Dekoder berbasis peramban ini menerima input heksadesimal, Base64, Base64URL, UTF-8 mentah, atau file biner yang dipilih secara eksplisit. Alat menelusuri setiap wire type protobuf yang valid, menjaga ketepatan bilangan bulat 64-bit, melaporkan offset yang rusak, dan menampilkan seluruh interpretasi lengkap dari byte length-delimited yang ambigu. Payload tetap berada di peramban Anda, dan dekoder tidak pernah menghubungi layanan yang namanya tercantum di dalam data.

Cara kerjanya

  1. 1

    Pilih encoding yang tepat

    Pilih hex, Base64, Base64URL, UTF-8 mentah, atau file biner. Alat tidak pernah menebak format input secara otomatis.

  2. 2

    Periksa field wire

    Dekode tag, nomor field, dan nilai wire, lalu perluas setiap kandidat nested atau packed yang valid tanpa menetapkan tipe skema.

  3. 3

    Ekspor laporan

    Unduh JSON tanpa skema, CSV yang aman dari formula, atau laporan teks yang mudah dibaca untuk analisis lebih lanjut.

Hal yang dapat dipastikan dekoder Protobuf tanpa skema

Protocol Buffers menyimpan rangkaian tag dan nilai field, bukan deklarasi asli dari .proto. Panduan encoding protobuf resmi mendefinisikan setiap tag dengan menggeser nomor field sebanyak tiga bit lalu menggabungkannya dengan wire type, setara dengan field_number × 8 + wire_type. Karena itu, dekoder dapat memastikan nomor field, wire type, batas byte, dan encoding yang mungkin secara struktural. Namun, alat tidak dapat memastikan apakah suatu varint dideklarasikan sebagai uint64, int64, sint64, bool, atau enum karena deklarasi tersebut dapat memakai byte yang sama.

Mode input selalu dipilih secara eksplisit. Hex menerima whitespace ASCII dan paling banyak satu awalan 0x. Base64 dan Base64URL divalidasi secara terpisah, termasuk panjang, padding, dan bit padding yang tidak terpakai; alfabet standar tidak boleh dicampur dengan alfabet URL-safe. Teks mentah berarti byte UTF-8 persis yang dihasilkan TextEncoder milik peramban, escape dengan garis miring terbalik tidak ditafsirkan. Input file menggunakan byte asli file.

Wire type dan interpretasinya

Wire type Nilai yang dienkode Yang ditampilkan laporan
0 Varint Nilai unsigned yang tepat, nilai signed komplemen dua, dan ZigZag; Boolean hanya untuk 0 atau 1
1 Delapan byte little-endian Bilangan fixed64 dan sfixed64 yang tepat serta kandidat double
2 Panjang diikuti byte Hex dan Base64, UTF-8 ketat jika valid, serta setiap kandidat nested atau packed yang lengkap
3 / 4 Tag awal dan akhir group Anak group dengan nomor field yang cocok; tag akhir adalah pembatas, bukan record tersendiri
5 Empat byte little-endian Bilangan fixed32 dan sfixed32 yang tepat serta kandidat float

Tipe number biasa JavaScript tidak dapat mewakili setiap bilangan bulat 64-bit secara tepat. Dekoder ini menggunakan BigInt di seluruh parser wire dan mengubah bilangan bulat menjadi string desimal untuk tampilan dan ekspor. Nilai floating-point khusus seperti NaN, tak terhingga, dan nol negatif juga diekspor sebagai string agar JSON tidak diam-diam mengubahnya menjadi nilai lain.

Memahami ambiguitas length-delimited

Wire type 2 dipakai untuk string, byte mentah, embedded message, dan nilai skalar repeated yang packed. Tanpa skema, satu urutan byte dapat valid untuk beberapa peran sekaligus. Contohnya, 2a 03 01 02 03 adalah field 5 yang berisi tiga byte. Byte tersebut valid sebagai packed varint [1, 2, 3], tetapi juga merupakan byte biasa. Dekoder menampilkan kedua kandidat dan tidak menganggap salah satunya lebih mungkin.

Kandidat nested message hanya muncul jika seluruh isi length-delimited dapat diurai sebagai pesan lengkap. Kandidat packed varint, fixed32, dan fixed64 juga hanya muncul jika semua byte habis dalam interpretasi tersebut. Kandidat UTF-8 ketat mengharuskan seluruh urutan dapat didekode tanpa karakter pengganti. Pemeriksaan ini menunjukkan kemungkinan struktur, bukan tipe field yang dideklarasikan.

Group ditangani sesuai tata bahasa wire walaupun skema modern biasanya memilih embedded message. Tag start-group harus ditutup oleh tag end-group dengan nomor field yang sama. Tag akhir di root, tag yang tidak cocok, atau tag akhir yang hilang menghentikan decoding pada offset byte yang tepat. Field yang selesai didekode sebelum kegagalan tetap terlihat; byte yang hilang dan nilai yang tidak diketahui tidak pernah dijadikan nol palsu.

Batas, framing, dan penanganan aman

Dekoder menerima satu pesan tanpa frame hingga 10 MiB. Alat tidak memisahkan stream dengan awalan panjang, frame gRPC, file delimited-message, atau pembungkus transportasi. Lepaskan framing terlebih dahulu, lalu dekode satu pesan. Parser juga membatasi jumlah record, kedalaman rekursi, baris yang terlihat, dan pekerjaan untuk memeriksa kandidat. Kendali ini mengikuti prinsip panduan resmi tentang kumpulan data besar dan batas implementasi: protobuf efisien, tetapi tab diagnostik peramban tetap memerlukan batas memori dan pekerjaan.

Nomor field harus berada di antara 1 dan 536.870.911. Dekoder memperingatkan nomor 19.000–19.999 karena panduan nomor field resmi mencadangkan rentang tersebut untuk implementasi. Wire type 6 dan 7 tidak valid.

Parsing dan ekspor berlangsung secara lokal. Tampilan bertahap dapat menyimpan payload terbatas di sessionStorage tab ini hingga dua jam; memulai dari awal akan menghapusnya. Tidak ada data yang dimasukkan ke URL atau dikirim melalui server kami. Output JSON secara tegas merupakan laporan decoding dalam format khusus alat ini, bukan ProtoJSON. CSV diawali BOM UTF-8 dan sel yang menyerupai formula diberi awalan agar lebih aman ketika dibuka di spreadsheet. Laporan tetap dapat memuat data aplikasi rahasia, jadi periksalah sebelum membagikannya.

Pertanyaan yang Sering Diajukan

Tidak. Wire format menyimpan nomor field dan encoding wire, tetapi tipe skalar yang berbeda dapat memakai byte yang sama. Nama, komentar, dan sebagian besar maksud skema tidak tersimpan.

Tidak. Validasi input, parsing, pemfilteran, dan ekspor dijalankan di peramban Anda. Payload tidak dikirim melalui server kami maupun dimasukkan ke URL.

Nilai length-delimited dapat mewakili byte, teks UTF-8, embedded message, atau nilai packed secara sah. Tanpa skema, menampilkan setiap kandidat lengkap lebih jujur daripada menebak.

Tag, varint, nilai berlebar tetap, panjang yang dideklarasikan, atau batas group tidak lengkap atau tidak valid di posisi tersebut. Field lengkap sebelumnya tetap berada dalam laporan parsial.

Tidak secara langsung. Dekoder membaca satu pesan protobuf dan tidak menghapus framing gRPC, panjang varint, atau pembungkus transportasi lain. Ekstrak satu payload pesan terlebih dahulu.

Alat Terkait

Alat ini tersedia dalam bahasa lain