dalam proses decoding. Pemisah tersebut memisahkan nama file log, jenis algoritma yang digunakan dan isi dari kode biner yang baru.
4.2 Proses Decoding
Proses yang kedua adalah proses decoding yaitu proses mengembalikan data biner hasil kompresi menjadi data awal. Terdapat beberapa proses yang ada,
antara lain sebagai berikut.
4.2.1 Implementasi Proses Baca Teks File Kompresi
Setelah proses encoding sudah dilakukan semua, maka akan menghasilkan file hasil kompresi bertipe .NFC. Untuk mengubah kode seperti semula maka
harus dilakukan tiga tahap yaitu proses baca file kompresi, pengubahan kode dan yang terakhir adalah membuat file bertipe .TXT seperti format teks awal. Pada
proses ini terdapat dua proses yaitu memilih file dan membaca file.
4.2.1.1 Memilih File
Gambar 4.17 Implementasi proses memilih file decoding
Sama seperti cara memilih file pada saat akan mengkompresi, saya menggunakan kelas JFileChooser dan menggunakan WindowsLookAndFeel untuk
menampilkan kotak dialog seperti aplikasi yang berjalan pada sistem operasi Windows. Perubahan hanya terjadi di FileFilter yang dirubah menjadi .NFC yang
berarti hanya menampilkan file berekstensi .NFC.
4.2.1.2 Membaca File
Gambar 4.18 Implementasi proses membaca file decoding
Proses berikutnya adalah membaca file kompresi, penulis menggunakan method dari Java yaitu Files.readAllBytes yang mempunyai keunggulan membaca
semua karakter di dalam sebuah file tanpa terkecuali. Setelah semua karakter terbaca maka akan dilakukan pembagian menjadi tiga data yang telah dipisahkan
oleh kata “sb” tadi. Tiga data tersebut adalah nama file log, jenis algoritma yang digunakan
dan data inti yang berisi kode baru. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
4.2.2 Implementasi Proses Pengubahan Kode Decoding
Pada proses pengubahan kode ini, tiga data hasil dari proses sebelumnya akan diolah sesuai kebutuhan masing-masing. Dari tiga data tersebut akan
terbentuk dua sub proses yaitu proses decoding header dan proses decoding isi. Selain itu akan dibahas juga proses decoding untuk ketiga algoritma Huffman.
4.2.2.1 Proses Decoding Header
Gambar 4.19 Implementasi proses decoding header
Pada proses ini, file log yang sudah dibuat akan dibaca kembali dengan cara mencocokan nama file log pada data hasil yang pertama dengan nama file
yang ada di dalam folder. Setelah file log sesuai maka akan dilakukan proses stream bertipe objek. Pemilihan stream bertipe objek didasarkan untuk
mempermudah dalam pengambilan data, sehingga data kode biner dan huruf tidak terpisah atau tertukar.
4.2.2.2 Proses Decoding Isi
Gambar 4.20 Implementasi proses decoding isi
Pada method ini merupakan inti dari proses decoding yaitu dengan mengembalikan kode yang telah diubah sebelumnya. Data yang digunakan adalah
data ketiga dari hasil pemecahan pada proses membaca file. Seperti yang telah dijelaskan pada sub bab sebelumnya, bahwa proses encoding adalah mengubah
setiap tujuh bit menjadi sebuah karakter baru. Karena terkadang tidak semua jumlah bit habis dibagi tujuh, maka sisa dari pembagian akan ditulis paling
belakang. Sebagai contoh sebuah teks setelah diubah menjadi data biner berjumlah 52 bit maka jika dibagi tiap 7 bit akan menghasilkan 7 karakter dengan
sisa 3 bit, maka di akhir data akan dituliskan 3 sebagai penanda sisa bit. Penulisan sisa ini akan berguna dalam proses pengubahan menjadi data biner kembali,
sebelum di decoding. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Di dalam method terdapat variabel akhir yang berisi sisa dari pembagian. Jika nilai akhir adalah 0, maka data biner tersebut habis di bagi tujuh dan dapat
langsung diubah kembali karakter-karakter di dalam data menjadi biner. Jika nilai akhir tidak 0 maka karakter terakhir akan di proses terpisah setelah karakter lain
telah diubah menjadi biner. Pemisahan ini dilakukan karena harus menggunakan syntax yang berbeda. Di dalam method tersebut, perintah yang menjadi inti adalah
String.format“7s”, Integer.toBinaryStringc.replace‘ ‘,’0’. Perintah tersebut berarti mengubah karakter c menjadi Integer biner
dengan jumlah bit sebanyak 7, ditulis dengan perintah “7s”. Perintah “replace‘ ‘,’0’” berarti mengganti tempat yang kosong dengan angka 0, karena secara
default setelah proses pengubahan tersebut angka 0 akan menjadi kosong.
4.2.2.3 Proses Decoding Huffman Dinamis dan Huffman Statis
Gambar 4.21 Implementasi proses decoding Huffman Dinamis dan Huffman
Statis PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Proses decoding untuk Huffman Statis dan Huffman Dinamis memiliki cara yang sama, karena tidak memakan separator seperti pada Huffman modifikasi
yang penulis buat. Dalam membentuk hasil, penulis menggunakan StringBuilder untuk memudahkan dalam menggabungkan setiap String sehingga menjadi sebuah
kata. Langkah pertama adalah membentuk sebuah objek StringBuilder dan
kemudian melakukan loop hingga semua data habis. Dalam melakukan loop, data akan dicocokan dengan data header. Jika kode sesuai maka akan menambahkan
karakter yang sesuai ke objek StringBuilder hingga membentuk sebuah kata atau kalimat.
4.2.2.4 Proses Decoding Huffman Modifikasi
Gambar 4.22 Implementasi proses decoding Huffman Modifikasi
Pada proses decoding Huffman Modifikasi ini berbeda dengan proses decoding Huffman Dinamis dan Huffman Statis. Proses yang dilakukan harus
mengecek bit selanjutnya. Penulis membuat suatu kondisi jika bit selanjutnya tidak sama maka akan mengecek dengan data yang tersimpan pada log. Kondisi
ini dibuat penulis karena pada dasarnya algoritma Huffman Modifikasi ini setiap karakter memiliki bit yang sama, satu karakter bisa bernilai 1 atau 0 semua.
Dalam menggabungkan setiap karakter, method ini juga menggunakan StringBuilder.
4.2.3 Implementasi Proses Pembentukan File Hasil Decoding
Gambar 4.23 Implementasi proses pembentukan file decoding
Proses ini merupakan proses terakhir dalam melakukan decoding yaitu membuat file hasil. Setelah proses decoding selesai dan menghasilkan suatu kata
atau kalimat, langkah selanjutnya adalah proses Stream dengan menggunakan kelas PrintWriter. File hasil yang dihasilkan berekstensi .TXT dan akan dibuat di
dalam folder bersamaan dengan file .NFC. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
70
5 BAB V PENGUJIAN DAN ANALISIS BAB V
PENGUJIAN DAN ANALISIS
Penulis akan melakukan pengujian terhadap ketiga algoritma dengan didasarkan pada kecepatan proses encoding dan ukuran file hasil kompresi.
Pengujian tersebut dipilih oleh penulis karena dalam bidang kompresi selain ketepatan hasil decoding, kedua faktor pengujian tersebut juga penting untuk
dilakukan.
5.1 Perbandingan Jumlah Bit