


Perkataan asal ditulis semula: Penemuan yang tidak dijangka ialah apa yang pada asalnya dianggap sebagai pepijat sebenarnya adalah ciri dalam reka bentuk Protobuf
Hello semua, saya hebat.
Baru-baru ini, dalam projek kami, kami menggunakan format protobuf sebagai pembawa untuk menyimpan data. Saya secara tidak sengaja menimbus lubang besar untuk diri saya sendiri, tetapi saya mengambil masa yang lama untuk menemuinya.
pengenalan protobuf
Nama penuh protobuf ialah Protocol buffers Ia dibangunkan oleh Google dan merupakan mekanisme data bersiri merentas bahasa, merentas platform dan berskala. Serupa dengan XML, tetapi lebih kecil, lebih pantas dan lebih ringkas. Anda hanya perlu mentakrifkan sekali cara anda mahu data anda distrukturkan, dan kemudian anda boleh menggunakan alatan penjanaannya untuk menjana kod sumber yang merangkumi beberapa operasi bersiri dan penyahsirilan. Data berstruktur boleh ditulis dan dibaca dengan mudah daripada pelbagai aliran data dan menggunakan pelbagai bahasa pengaturcaraan.
Versi proto2 menyokong penjanaan kod dalam Java, Python, Objective-C dan C++. Dengan versi bahasa proto3 baharu, anda juga boleh menggunakan Kotlin, Dart, Go, Ruby, PHP dan C#, dan banyak lagi bahasa.
Bagaimana anda mengetahuinya?
Dalam projek baharu kami, kami menyimpan data projek yang dijalankan menggunakan format protobuf. Dengan cara ini, semasa proses penyahpepijatan, kami mungkin melakukan penyahpepijatan setempat berdasarkan data yang direkodkan di tapak.
message ImageData { // ms int64 timestamp = 1; int32 id = 2; Data mat = 3; } message PointCloud { // ms int64 timestamp = 1; int32 id = 2; PointData pointcloud = 3; } message State { // ms int64 timestamp = 1; string direction = 2; } message Sensor { repeated PointCloud point_data = 1; repeated ImageData image_data = 2; repeated State vehicle_data = 3; }
Kami mentakrifkan set data sedemikian, dan kemudian apabila menyimpan, kerana kadar bingkai bagi tiga sumber data Sensor adalah berbeza, apabila menyimpan, satu Sensor sebenarnya hanya mengandungi satu set data Sebagai tambahan Dua jenis data tidak disertakan.
Apabila kami hanya merakam satu pek, kami tidak menghadapi masalah. Sehingga kita merasakan bahawa satu paket tidak dapat direkodkan untuk masa yang lama, kita perlu mencari penyelesaian untuk membelah paket tersebut.
Pada masa itu, saya fikir ini mesti sangat mudah, jadi kami menyediakannya apabila satu paket mencapai 500M, kami akan menyimpan data seterusnya dalam paket baru. Saya selesai menulisnya dengan lancar dan kemudian meletakkannya di tapak untuk rakaman data. Selepas merakam seketika, kami mengambil semula pakej itu dan membuat simulasi menguji program baharu kami. Didapati terdapat masalah dalam menghuraikan data beberapa pakej. Program ini akan tersangkut di tengah-tengah berjalan. Selepas banyak ujian, didapati beberapa pakej mempunyai masalah ini.
Apa yang kami syak pada mulanya ialah cara untuk menentukan saiz fail adalah salah, yang menjejaskan subkontrak. Kerana apabila menilai saiz fail, fail akan dibuka. Tetapi selepas menilai beberapa cara lain untuk tidak membuka fail, pemisahan itu dilakukan. Saya masih menghadapi masalah dengan beberapa pakej yang direkodkan.
Barulah saya mengesyaki bahawa protobuf mempunyai beberapa keperluan khas untuk menyimpan data. Kemudian, saya membaca beberapa artikel dan mengetahui bahawa protobuf memerlukan pengecam untuk menyimpan berbilang set data ke dalam satu fail. Jika tidak, apabila menghuraikan kembali daripada fail, protobuf tidak tahu di mana watak henti bagi satu data, menyebabkan ralat penghuraian data.
Di sini, lubang itu muncul. Kami menyimpan satu siri data ke dalam satu paket tanpa sebarang manipulasi pemisah. Apabila protobuf menghuraikan, semua kandungan dalam fail dihuraikan ke dalam satu Sensor. Sensor mengandungi semua data, dan protobuf secara aktif menggabungkan semua data yang disimpan.
Pada masa ini, saya dapati bahawa apabila saya merekodkan paket tunggal pada masa lalu, semua data adalah betul. protobuf berjaya dihuraikan.
Bagaimana untuk menyelesaikannya?
Sekarang kita tahu bahawa protobuf akan beroperasi dengan cara ini, kita hanya perlu tahu cara membahagikan protobuf. Cara ini memang sukar didapati kerana terlalu sedikit orang seperti kita yang menggunakannya. Carian Cina tidak dapat mencari kandungan ini sama sekali Mungkin semua orang tidak menggunakan protobuf untuk menyimpan data Kaedah yang digunakan oleh semua orang harus menjadi senario interaksi antara pelbagai perkhidmatan.
Akhirnya saya menemui jawapan melalui beberapa jawapan pada stackoverflow Daripada jawapan, saya mengetahui bahawa penyelesaian ini hanya digabungkan secara rasmi dalam protobuf 3.3. Nampak sangat fungsi ni jarang digunakan.
bool SerializeDelimitedToOstream(const MessageLite& message, std::ostream* output); bool ParseDelimitedFromZeroCopyStream( MessageLite* message, io::ZeroCopyInputStream* input, bool* clean_eof);
Melalui pasangan kaedah ini, fail boleh disimpan dan dibaca satu demi satu mengikut aliran data. Tidak perlu risau lagi tentang data digabungkan dan dibaca.
Sudah tentu, data yang disimpan dengan cara ini tidak boleh dihuraikan dengan kaedah penghuraian asal, dan format storan telah berubah sepenuhnya. Kaedah ini mula-mula akan menyimpan saiz data binari dan kemudian menyimpan data binari.
Kesimpulan
Setelah bertungkus lumus, akhirnya saya dapat menyingkirkan lubang pemisah ini. Senario penggunaan mungkin agak khusus, menyebabkan banyak maklumat yang tidak dapat ditemui sama sekali. Saya menemui masalah ini dengan melihat sendiri kod sumber. Kod sumber C++ sangat sukar dibaca Terdapat banyak kaedah templat dan kelas templat dan mudah terlepas beberapa butiran. Akhirnya, saya melihat kod C# dan akhirnya mengesahkannya.
Atas ialah kandungan terperinci Perkataan asal ditulis semula: Penemuan yang tidak dijangka ialah apa yang pada asalnya dianggap sebagai pepijat sebenarnya adalah ciri dalam reka bentuk Protobuf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



1. Pengenalan Dengan pempopularan peranti mudah alih dan peningkatan kuasa pengkomputeran, teknologi pembahagian imej telah menjadi tumpuan penyelidikan. MobileSAM (MobileSegmentAnythingModel) ialah model pembahagian imej yang dioptimumkan untuk peranti mudah alih. Ia bertujuan untuk mengurangkan kerumitan pengiraan dan penggunaan memori sambil mengekalkan hasil pembahagian yang berkualiti tinggi, supaya berjalan dengan cekap pada peranti mudah alih dengan sumber terhad. Artikel ini akan memperkenalkan prinsip, kelebihan dan senario aplikasi MobileSAM secara terperinci. 2. Idea reka bentuk model MobileSAM Idea reka bentuk model MobileSAM terutamanya merangkumi aspek berikut: Model ringan: Untuk menyesuaikan diri dengan had sumber peranti mudah alih, model MobileSAM menggunakan model ringan.

Dengan pembangunan berterusan teknologi kecerdasan buatan, teknologi segmentasi semantik imej telah menjadi hala tuju penyelidikan yang popular dalam bidang analisis imej. Dalam segmentasi semantik imej, kami membahagikan kawasan yang berbeza dalam imej dan mengelaskan setiap kawasan untuk mencapai pemahaman yang menyeluruh tentang imej. Python ialah bahasa pengaturcaraan yang terkenal dengan keupayaan analisis data dan visualisasi datanya yang hebat menjadikannya pilihan pertama dalam bidang penyelidikan teknologi kecerdasan buatan. Artikel ini akan memperkenalkan cara menggunakan teknologi segmentasi semantik imej dalam Python. 1. Pengetahuan prasyarat semakin mendalam

Kadang-kadang, kita perlu menghantar fail yang besar kepada orang lain, tetapi disebabkan oleh keterbatasan saluran penghantaran, seperti had saiz lampiran e-mel, atau keadaan rangkaian tidak begitu baik, kita perlu membahagikan fail besar kepada kecil. fail dan hantarkannya dalam beberapa kali Kemudian gabungkan fail kecil ini. Hari ini saya akan berkongsi bagaimana untuk memisahkan dan menggabungkan fail besar menggunakan Python. Idea dan pelaksanaan Jika ia adalah fail teks, ia boleh dibahagikan dengan bilangan baris. Sama ada ia adalah fail teks atau fail binari, ia boleh dibahagikan mengikut saiz yang ditentukan. Menggunakan fungsi membaca dan menulis fail Python, anda boleh memisahkan dan menggabungkan fail, menetapkan saiz setiap fail, dan kemudian membaca bait saiz yang ditentukan dan menulisnya ke dalam fail baharu Bahagian penerima membaca fail kecil dalam urutan dan menulis Bait ditulis pada fail mengikut urutan, jadi

Golang dan FFmpeg: Cara melaksanakan sintesis dan pembahagian audio, contoh kod khusus diperlukan Ringkasan: Artikel ini akan memperkenalkan cara menggunakan perpustakaan Golang dan FFmpeg untuk melaksanakan sintesis dan pembahagian audio. Kami akan menggunakan beberapa contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. Pengenalan: Dengan perkembangan berterusan teknologi pemprosesan audio, sintesis dan pembahagian audio telah menjadi keperluan fungsian biasa dalam kehidupan dan kerja harian. Sebagai bahasa pengaturcaraan yang pantas, cekap dan mudah untuk ditulis dan diselenggara, Golang, ditambah dengan FFmpeg

Ramai rakan perlu merakam skrin untuk kerja pejabat atau memindahkan fail, tetapi kadangkala masalah fail yang terlalu besar menyebabkan banyak masalah berikut adalah penyelesaian kepada masalah fail yang terlalu besar, mari kita lihat. Apa yang perlu dilakukan jika fail rakaman skrin win10 terlalu besar: 1. Muat turun perisian Format Factory untuk memampatkan fail. Alamat muat turun >> 2. Masukkan halaman utama dan klik pilihan "Video-MP4". 3. Klik "Tambah Fail" pada halaman format penukaran dan pilih fail MP4 untuk dimampatkan. 4. Klik "Konfigurasi Output" pada halaman untuk memampatkan fail mengikut kualiti output. 5. Pilih "Kualiti dan Saiz Rendah" daripada senarai konfigurasi juntai bawah dan klik "OK". 6. Klik "OK" untuk melengkapkan import fail video. 7. Klik "Mula" untuk memulakan penukaran. 8. Selepas selesai, anda boleh

Hai semua, saya hebat. Baru-baru ini, dalam projek kami, kami menggunakan format protobuf sebagai pembawa untuk menyimpan data. Saya secara tidak sengaja menimbus lubang besar untuk diri saya sendiri, tetapi saya mengambil masa yang lama untuk menemuinya. Pengenalan kepada protobuf Nama penuh protobuf ialah Protocalbuffers Ia dibangunkan oleh Google dan merupakan mekanisme merentas bahasa, platform silang dan berskala untuk mensiri data. Serupa dengan XML, tetapi lebih kecil, lebih pantas dan lebih ringkas. Anda hanya perlu mentakrifkan sekali cara anda mahu data anda distrukturkan, dan kemudian anda boleh menggunakan alatan penjanaannya untuk menjana kod sumber yang merangkumi beberapa operasi bersiri dan penyahsirilan. Boleh ditulis dengan mudah daripada pelbagai aliran data dan menggunakan pelbagai bahasa pengaturcaraan

Dalam pembangunan PHP, rentetan selalunya perlu dipecahkan kepada beberapa subrentetan untuk menjadikannya lebih mudah bagi kami memproses data. Pada masa ini, PHP menyediakan fungsi explode() untuk membantu kami mencapai matlamat ini. Sintaks asas fungsi explode() ialah: explode(string$delimiter,string$string[,int$limit=PHP_MAXPATHLEN])di mana, $delimiter

Baru-baru ini, Makmal ReLER Universiti Zhejiang menggabungkan SAM secara mendalam dengan pembahagian video dan mengeluarkan Segmen-dan-TrackAnything (SAM-Track). SAM-Track memberikan SAM keupayaan untuk menjejaki sasaran video dan menyokong pelbagai cara interaksi (titik, berus, teks). Atas dasar ini, SAM-Track menyatukan berbilang tugas pembahagian video tradisional, mencapai penjejakan pembahagian satu klik bagi mana-mana sasaran dalam mana-mana video dan mengekstrapolasi pembahagian video tradisional kepada pembahagian video universal. SAM-Track mempunyai prestasi cemerlang dan boleh menjejaki ratusan sasaran secara stabil dengan kualiti tinggi dalam senario yang kompleks dengan hanya satu kad. Alamat projek: https://github.co
