Cara Kerja App Zip/Unzip Compress File
2014 pastinya sudah pada tahu ya, atau mungkin kita semua sering menggunakan nya untuk kompress file kita untuk di upload agar ukuran file lebih kecil, atau hanya sekedar menjadikan satu dari sekian banyak file agar mudah di bawa :D *emang tas* baik, apa sebenarnya zip/unzip? dulu saya pernah berfikir dan mengibaratkan aplikasi seperti WinZIP, WinRAR, 7ZIP dll yang berguna untuk menyatukan banyak file menjadi satu file yang berextensi 7zip/zip/tar/gz/bz2/bzip dsb ini adalah sebuah kotak atau keranjang, dan file file yang akan kita kompress itu adalah benda, logikanya, ketika kita kopress file file yang banyak menjadi satu sama dengan memasukkan benda benda itu kedalam keranjang/kotak menjadi satu dan membungkusnya, tapi saat ini saya berfikir kembali, jika memang seperti itu lalu kenapa file yang kita kompress itu bisa menjadi kecil dan membesar ukuranya? mulai ini saya berfikir kembali kalau teryata pemikiran saya itu salah besar, kerena jika benar, seharusnya bobot/ukuran kotak/keranjang itu akan lebih besar atau sama dengan total benda yang ada didalamnya, ini yang membuat saya mencari sebetulnya bagaimana sih cara kerja aplikasi kompress/dekompress file ini, dan allhamdulillah saya menemukan hasil dari berguling guling dengan link sejak tadi, dan tiada salahnya saya mencatat di sini ;)
Tulisan ini saya kupas dari diskusiwebhosting.com yang ditulis oleh gan adamelectric
Konsep Kompressi
Konsep kompressi mirip dengan konsep mencontek. Kok bisa??? Jangan khawatir, ini hanya illustrasi. Bayangkan saat ujian, murid A menuliskan jawaban pada selembar kertas, melipat-lipat kertas tersebut, lalu melemparnya kepada murid B. Murid B menangkapnya, membuka lipatan kertas, dan membaca jawaban yang tertera.
Perhatikan, kertas yang terlipat bisa dibayangkan sebagai sebuah file/berkas yang dimampatkan atau dikompress, ukurannya yang lebih kecil membuatnya untuk berpindah tangan. Tetapi untuk mendapatkan ukuran yang lebih kecil dan kecepatan transfer, ada yang harus dibayar sebagai konsekuensinya. Sang penerima (Murid B), harus membuka lipatan kertas tersebut sebelum dapat membaca jawaban ujian. Kita dapat membayangkan proses ini sebagai proses dekompressi, diperlukan waktu dan resource untuk melakukannya.
Algoritma dan Rasio
Konsepnya terdengar mudah, bagaimana dengan algoritmanya? Salah satu algoritma yang sederhana ditunjukkan dengan algoritma yang dikenal denga Run-length encoding (RLE). Contohnya, terdapat string input sebagai berikut:
AAAAAAAABBCCCCDDDDDD
String tersebut dapat dikompressi menjadi:
8A2B4C6D
Terlihat, angka di dipan huruf mempresentasikan beberapa banyak hurufyang sama terulang secara berentet. 8A berarti AAAAAAAA, 2B berarti BB, dan seterusnya. Prosees ini juga disebut proses encoding, dengan mentransformasikan informasi ke format lain. Contoh yang cukup dikenal adalah encoding dari format WAV ke MP3, proses kebalikannya disebut decoding. Karena tujuannya untuk mengecilkan ukuran, maka perhitungan rasio menjadi suatu tolak ukur keberhasilan sebuah algoritma kompressi. Rasio kompressi dapat dihitung dengan rumus:
Rasio kompressi = ukuran data sebelum terkompressi/ukuran data setelah terkompressi
Dari contoh sederhana tadi, ukuran sebelum terkompressi adalah 20 karakter, sementara ukuran setelah terkompressi adalah 8 karakter. Maka diperoleh 20/8 yang menghasilkan rasio kompressi sebesar 2.5, dinotasikan dengan 2,5:1. dan dapat diterjemahkan dalam kalimat: setiap 2,5 karakter pada contoh string tersebut dapat di kompressi hanya 1 karakter. Beberapa aplikasi seperti Winzip pada Windows, menuliskan rasio kompressi dengan persentase, melalui rumus:
% rasio kompressi = (ukuran data setelah terkompressi/ukuran data sebelum terkompressi) x 100.
Masukkan angka dari contoh yang sama, yaitu (8/20) x 100 sehingga diperoleh persentase rasio kompressi sebesar 40%. Artinya, hasil kompressi adalah sebesar 40% dibandingkan ukuran aslinya. Dalam hal ini, semakin kecil tentu semakin baik.
Tetapi jangan kecewa jika Anda mencoba kompressi ZIP/RAR pada file teks berisi 20 karakter seperti contoh (yang berarti berukuran 20 byte). Karena Anda akan mendapatkan hasil kompressi yang justru hasilnya membengkak, bisa jadi berukuran diatas 100 byte! Hal ini terjadi karena file kompressi ZIP/RAR menyimpan informasi header atau format tertentu, dan memang bukan ditujukan untuk mengompress file dengan ukuran kecil.
Algoritama RLE yang ditunjukkan diatas masih sangat sederhana, dan terlihat baru efektif jika terjadi banya pengulangan data. Jika data merupakan file teks/tulisan dalam kalimat berbahasa Indonesia/Inggris , relative tidak terdapat banyak rentetan pengulangan karakter. Tetapi data berupa grafik sederhana berupa icon atau gamba yang memiliki banyak warna area yang sama (seperti gambar garis hitam dibidang putih),cenderung memiliki banya pengulangan byte.
Mari melihat contoh algoritma kompressi lainnya yang merupakan dasar algoritma yang disebut predictive coding, data awal secara sederhana dicontohkan dengan variable array.
Kompressi Executable
Jika Anda melihat file ZIP dan membandingkan dengan file JPEG atau MP3, mungkin timbul pertanyaan mengapa file ZIP harus diektrak terlebih dahulu, sementara MP3 dapat diakses langsung oleh media player yang mendukung format tersebut? Sebenarnya yang terjadi adalah file MP3 itupun di-ektrak secara real-time oleh aplikasi audio player sebelum data itu dijalankan. Tentunya proses tersebut berasa dibackground aplikasi. Jadi, aplikasi player tersebut harus memiliki engine decode untuk format MP3, demikian juga untuk format kompressi lainnya.
Konsep yang sama berlaku jika Anda file kompressi executable, yaitu sebuah file EXE yang dikompressi, tetapi masih ber ekstensi EXE (dengan ukuran lebih kecil), dan siap dijalankan. Engine atau kode untuk maelakukan dekompressi ditamamkan pada file yang sama. Untuk membuat file kompressi executable ini, diperlukan software yang berfungsi sebagai executable compressor (atau packer), yang khusus didesain untuk mengkompressi file executable.
Keuntungan dari kompressi executable adalah:
Anda tidak membutuhkan aplikasi lain untuk melakukan dekompressi, bandingkan jika Anda mengompress sebuah file EXE kedalam ekstensi ZIP/RAR, untuk menjalankan file EXE tersebut, Anda memerlukan aplikasi seperti Winzip untuk melakukan dekompressi.
Dari segi keamanan, kompressi executable dapat menyulitkan usaha reverse engineering atau proses pengodean ulang file tersebut untuk dianalisi oleh pihak lain. Bagaimana dari segi kecepatan? Walaupun teap dibutuhkan waktu untuk proses dekompressi sebelum dieksekusi, dilain sisi ukuran file yang lebih kecil akan mempercepat waktu transfer data ke memory. Karena itu, umumnya file kompressi executable tidak bermasalah dalam hal kecepatan untuk penggunaan yang umum, kompressi executable tidak terlalu popular mengingat kapasitas media storage yang relatif besar untuk menyimpan file executablae. Tetapi kompressi executable sering digunakan oleh malware, dengan tujuan agar program malware tersebut lebih cepat terdistribusi, dan lebih sulit dianalisi. Beberapah contoh adalah UPX, NeoLite, eXPressor, dan seterusnya.