可变长字节码算法
最近在看《大规模WEB服务开发技术》这本书中。书中提到“可变长字节码算法”的压缩数据的算法,以达到压缩数据,减少磁盘IO。
可变长字节码算法:
任意一个字节的最高位(下标7)均只作为标志位,而且根据字节所在位置需要乘以128的相应幂次;
这是他的伪代码
仔细研究后,我翻译成PHP版的:
<code><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><?php function codeNumber<span>(<span>$n</span>)</span>{ <span>$bytes</span> = []; while <span>(true)</span>{ array_unshift<span>(<span>$bytes</span>, bcmod<span>(<span>$n</span>, <span>128</span>)</span>)</span>; if<span>(<span>$n</span> 128</span>)</span>{ break; }else{ <span>$n</span> = intval<span>(<span>$n</span>/<span>128</span>)</span>; } } <span>$bytes</span>[count<span>(<span>$bytes</span>)</span> - <span>1</span>] += <span>128</span>; return <span>$bytes</span>; } function encode<span>(<span>$numbers</span>)</span>{ <span>$bytestream</span> = []; foreach <span>(<span>$numbers</span> as <span>$n</span>)</span>{ <span>$bytestream</span> = array_merge<span>(<span>$bytestream</span>, codeNumber<span>(<span>$n</span>)</span>)</span>; } return <span>$bytestream</span>; } function decode<span>(<span>$bytestream</span>)</span>{ <span>$numbers</span> = []; <span>$n</span> = <span>0</span>; for <span>(<span>$i</span> = <span>0</span>; <span>$i</span> (<span>$bytestream</span>)</span>; <span>$i</span>++)</span>{ if<span>(<span>$bytestream</span>[<span>$i</span>] 128</span>)</span>{ <span>$n</span> = <span>128</span> * <span>$n</span> + <span>$bytestream</span>[<span>$i</span>]; }else{ <span>$n</span> = <span>128</span> * <span>$n</span> + <span>(<span>$bytestream</span>[<span>$i</span>] - <span>128</span>)</span>; array_push<span>(<span>$numbers</span>, <span>$n</span>)</span>; <span>$n</span> = <span>0</span>; } } return <span>$numbers</span>; } <span>$a</span> = encode<span>([<span>5</span>, <span>130</span>, <span>288</span>])</span>; var_dump<span>(<span>$a</span>)</span>; var_dump<span>(decode<span>(<span>$a</span>)</span>)</span>; 打印出来的内容是: array<span>(<span>5</span>)</span> { [<span>0</span>]=> int<span>(<span>133</span>)</span> [<span>1</span>]=> string<span>(<span>1</span>)</span><span>"1"</span> [<span>2</span>]=> int<span>(<span>130</span>)</span> [<span>3</span>]=> string<span>(<span>1</span>)</span><span>"2"</span> [<span>4</span>]=> int<span>(<span>160</span>)</span> } array<span>(<span>3</span>)</span> { [<span>0</span>]=> int<span>(<span>5</span>)</span> [<span>1</span>]=> int<span>(<span>130</span>)</span> [<span>2</span>]=> int<span>(<span>288</span>)</span> } //写二进制 <span>$h</span> = fopen<span>(<span>'ejz3.txt'</span>, <span>'wb'</span>)</span>; foreach <span>(<span>$a</span> as <span>$k</span> => <span>$v</span>)</span> { <span>$str3</span> = pack<span>(<span>'H*'</span>, sprintf<span>(<span>"%02x"</span>, <span>$v</span>)</span>)</span>; fwrite<span>(<span>$h</span>, <span>$str3</span>)</span>; } fclose<span>(<span>$h</span>)</span>; //读二进制 <span>$str2</span> = file_get_contents<span>(<span>'ejz3.txt'</span>)</span>; <span>$str2</span> = unpack<span>(<span>"H*"</span>, <span>$str2</span>)</span>; <span>$value</span> = str_split<span>(<span>$str2</span>[<span>1</span>], <span>2</span>)</span>; foreach <span>(<span>$value</span> as <span>$k</span> => <span>$v</span>)</span> { <span>$value</span>[<span>$k</span>] = base_convert<span>(<span>$v</span>, <span>16</span>, <span>10</span>)</span>; } </span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
以上就介绍了可变长字节码算法,包括了方面的内容,希望对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

Ini adalah untuk pengguna yang ingin melakukan pengaktifan manual. Jika anda memerlukan bantuan dengan alat untuk anda melakukan ini, kemudian semak di sini. Kita boleh membahagikan proses pengaktifan manual kepada dua bahagian. 1- Daripada fail kumpulan siap sedia pastikan internet didayakan. Buka Windows Powershell sebagai pentadbir dan masukkan yang berikut untuk menyenaraikan arahan dalam susunan yang diberikan. Masukkan kekunci, (gantikan dengan kunci daripada senarai di atas) Gunakan arahan berikut <key>slmgr/ipk<key> Muat turun tiket universal dari sini dan ekstrak fail yang dimuat turun. Sekarang masukkan kod berikut dalam Powershell (Get-ItemProper

Tajuk: Contoh menggunakan fungsi Array.Sort untuk mengisih tatasusunan dalam Teks C#: Dalam C#, tatasusunan ialah struktur data yang biasa digunakan dan operasi pengisihan tatasusunan selalunya diperlukan. C# menyediakan kelas Array, yang mempunyai kaedah Isih untuk menyusun tatasusunan dengan mudah. Artikel ini akan menunjukkan cara menggunakan fungsi Array.Sort dalam C# untuk mengisih tatasusunan dan memberikan contoh kod khusus. Pertama, kita perlu memahami penggunaan asas fungsi Array.Sort. Susunan.Jadi

Dalam bahasa Go, pakej bait ialah pakej untuk memanipulasi jenis bait, dan ia mengandungi banyak kaedah berguna, seperti kaedah Split(). Walau bagaimanapun, apabila menggunakan kaedah Split(), anda mungkin menghadapi ralat "undefined: bytes.Split". Ralat ini biasanya disebabkan oleh versi Go yang tidak serasi atau kekurangan perpustakaan bergantung yang diperlukan. Artikel ini akan memperkenalkan beberapa kaedah untuk menyelesaikan ralat ini. Kaedah 1: Tingkatkan versi Go seperti berikut

Apabila pengaturcaraan dalam PHP, kita selalunya perlu menggabungkan tatasusunan. PHP menyediakan fungsi array_merge() untuk melengkapkan penggabungan tatasusunan, tetapi apabila kunci yang sama wujud dalam tatasusunan, fungsi ini akan menimpa nilai asal. Untuk menyelesaikan masalah ini, PHP juga menyediakan fungsi array_merge_recursive() dalam bahasa, yang boleh menggabungkan tatasusunan dan mengekalkan nilai kunci yang sama, menjadikan reka bentuk program lebih fleksibel. array_merge

Dalam PHP, terdapat banyak fungsi tatasusunan berkuasa yang boleh menjadikan operasi tatasusunan lebih mudah dan lebih pantas. Apabila kita perlu menggabungkan dua tatasusunan ke dalam tatasusunan bersekutu, kita boleh menggunakan fungsi array_combine PHP untuk mencapai operasi ini. Fungsi ini sebenarnya digunakan untuk menggabungkan kekunci satu tatasusunan sebagai nilai tatasusunan lain ke dalam tatasusunan bersekutu baharu. Seterusnya, kami akan menerangkan cara menggunakan fungsi array_combine dalam PHP untuk menggabungkan dua tatasusunan menjadi tatasusunan bersekutu. Ketahui tentang array_comb

Dalam pengaturcaraan PHP, tatasusunan ialah struktur data yang sangat penting yang boleh mengendalikan sejumlah besar data dengan mudah. PHP menyediakan banyak fungsi berkaitan tatasusunan, array_fill() adalah salah satu daripadanya. Artikel ini akan memperkenalkan secara terperinci penggunaan fungsi array_fill(), serta beberapa petua dalam aplikasi praktikal. 1. Gambaran keseluruhan fungsi array_fill() Fungsi array_fill() adalah untuk mencipta tatasusunan nilai yang sama dengan panjang yang ditentukan. Secara khusus, sintaks fungsi ini ialah

Modul tatasusunan dalam Python ialah tatasusunan yang dipratentukan, jadi ia mengambil lebih sedikit ruang dalam ingatan daripada senarai standard, dan juga boleh melaksanakan operasi peringkat elemen pantas seperti menambah, memadam, mengindeks dan menghiris. Selain itu, semua elemen dalam tatasusunan adalah daripada jenis yang sama, jadi anda boleh menggunakan fungsi operasi berangka yang cekap yang disediakan oleh tatasusunan, seperti mengira nilai purata, maksimum dan minimum. Selain itu, modul tatasusunan juga menyokong menulis dan membaca objek tatasusunan terus ke dalam fail binari, yang menjadikannya lebih cekap apabila memproses sejumlah besar data berangka. Oleh itu, jika anda perlu memproses sejumlah besar data homogen, anda boleh mempertimbangkan untuk menggunakan modul tatasusunan Python untuk mengoptimumkan kecekapan pelaksanaan kod anda. Untuk menggunakan modul tatasusunan, anda perlu terlebih dahulu

Dalam pengaturcaraan Java, tatasusunan ialah struktur data yang penting. Tatasusunan boleh menyimpan berbilang nilai dalam satu pembolehubah, dan yang lebih penting setiap nilai boleh diakses menggunakan indeks. Tetapi semasa bekerja dengan tatasusunan, beberapa pengecualian mungkin berlaku, salah satunya ialah ArrayStoreException. Artikel ini akan membincangkan punca biasa pengecualian ArrayStoreException. 1. Jenis tidak padan Jenis elemen mesti ditentukan apabila tatasusunan dibuat. Apabila kami cuba menyimpan jenis data yang tidak serasi ke dalam tatasusunan, ia akan membuang
