Desain User Interface Spesifikasi Software dan Hardware Proses Encoding

6. Karakter terakhir adalah D dengan posisi kelima ganjil. Karakter tersebut menempati di sebelah kanan akar, tetapi sudah ada data A dan B maka currsor turun 2 langkah dan membuat node D.

3.5 Desain User Interface

Tampilan atau user inteface merupakan komponen yang penting dalam sebuah aplikasi atau program, oleh karena itu untuk mempermudah penggunaan aplikasi kompresi ini penulis membuat sebuah rancangan untuk user interface. Tampilan aplikasi ini dibuat menggunakan kelas form dalam Java. Penggunaan kelas JTabedPane untuk tampilan berguna mempersingkat dan mengurangi banyaknya form yang digunakan. Untuk lebih memperjelasnya, berikut rancangan yang akan dibuat : Gambar 3.5 Interface encoding Gambar 3.6 Interface decoding Secara garis besar, tampilan untuk encoding dan decoding hampir sama. Kedua tampilan mempunyai jumlah tombol dan susunan panel yang sama. Untuk panel detail pada encoding, akan saya tampilkan ukuran asli dan ukuran file setelah dikompresi beserta compression ratio. Selain itu pada tampilan encoding juga ditambahkan panel untuk memilih algoritma yang akan digunakan. Pada panel detail untuk decoding akan ditampilkan ukuran setelah di decoding beserta metode atau algoritma yang digunakan.

3.6 Spesifikasi Software dan Hardware

Spesifikasi perangkat keras dan perangkat lunak yang digunakan untuk proses implementasi adalah sebagai berikut : 1 Processor : IntelR CoreTM i3 CPU M380 2.53GHz 2 Memory : 2048 MB 3 Harddisk : 320 GB 4 Operating System :Windows 7 Ultimate 2013 Microsoft Corporation. All Rights Reserved 5 Software : NetBeans IDE 7.3 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 41 4 BAB IV IMPLEMENTASI DAN ANALISIS Pada bab ini akan dibahas tentang implementasi rancangan yang telah dijelaskan pada bab sebelumnya dan hasil analisa dari pengujian program. Implementasi tersebut meliputi ketiga algoritma yang akan dibuat dengan bahasa pemrograman Java. Pada bab sebelumnya telah dijelaskan proses-proses yang akan dilakukan oleh sistem, berikut adalah implementasi dari tiap proses tersebut.

4.1 Proses Encoding

Proses yang pertama adalah proses encoding yaitu proses data teks awal akan diubah menjadi kode-kode biner yang baru. Proses ini menghasilkan keluaran berupa file hasil kompresi.

4.1.1 Implementasi Proses Baca Teks

Pada proses ini, akan dibagi menjadi dua implementasi yaitu implementasi untuk memilih file dan implementasi untuk membaca file.

4.1.1.1 Memilih File

Gambar 4.1 Implementasi proses memilih file encoding Penulis menggunakan kelas JFileChooser untuk menampilkan kotak dialog browse, serta menggunakan WindowsLookAndFeel yang memberi kesan seperti halnya kotak dialog pada aplikasi umumnya yang berjalan di Windows. Penggunaan kelas FileFilter berfungsi untuk menyaring dan hanya menampilkan file yang telah diatur. Pada program, file yang akan di-filter atau diperbolehkan hanya file berekstensi .TXT atau Text Format. Setelah file dipilih, maka file akan disimpan pada sebuah variabel.

4.1.1.2 Membaca File

Gambar 4.2 Implementasi proses membaca file encoding Pada proses baca file, penulis tidak menggunakan fungsi Stream seperti halnya FileInputStream atau menggunakan kelas FileReader melainkan menggunakan fungsi yang telah tersedia di kelas Files dalam package java.nio.file PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI dan memasukannya ke dalam kelas. Fungsi tersebut hampir sama seperti fungsi Stream yaitu membaca file, hanya saja pada fungsi ini program akan membaca seluruh karakter yang ada di dalam file masukan sehingga nantinya tidak akan ada karakter yang tidak terbaca.

4.1.2 Implementasi Proses Pembentukan Pohon Biner

Pada proses ini akan ada tiga implementasi dari proses pembentukan pohon biner. Ketiga implementasi tersebut menyesuaikan dengan jumlah algoritma yang akan diuji pada skripsi ini yaitu pembentukan pohon biner algoritma Huffman Statis, Huffman Dinamis dan Huffman Modifikasi.

4.1.2.1 Pohon Biner Huffman Statis

Gambar 4.3 Implementasi pembentukan pohon Huffman Statis Pada implementasi pembentukan pohon biner Huffman Statis, node yang berisi karakter selalu ditempatkan di lengan sebelah kanan. Implementasi dari ciri khas Huffman Statis, program akan mengecek terlebih dahulu apakah lengan sebelah kanan kosong null atau tidak, jika kosong maka karakter membuat node baru. Tetapi jika di sebelah kanan terdapat node atau tidak kosong, maka cursor akan bergerak ke bawah melewati node tersebut untuk mencari hingga posisi lengan sebelah kanan kosong.

4.1.2.2 Pohon Biner Huffman Dinamis

Gambar 4.4 Implementasi pembentukan pohon Huffman Dinamis Implementasi pembentukan pohon biner Huffman Dinamis terlihat lebih panjang dan rumit, hal ini dikarenakan pohon biner akan selalu berubah menyesuaikan jumlah frekuensi kemunculan setiap karakter yang masuk. Langkah pertama program akan mengecek lengan sebelah kanan kosong atau tidak, jika kosong maka karakter akan membentuk node baru dengan jumlah diisi 1 cursor.setJumlah1. Jumlah ini merupakan frekuensi kemunculan karakter, hal ini juga yang membedakan Huffman Dinamis dengan metode Huffman yang lain. Langkah kedua jika sebelah kanan terdapat node maka program akan mengecek, jika data node tidak sama dengan karakter maka variabel n akan diisi dengan cursor dan cursor akan turun ke bawah melewati node tersebut. Tetapi jika data node sama dengan karakter, maka jumlah akan ditambah dengan 1 dan variabel n akan dibandingkan dengan data node. Proses perbandingan ini akan mengecek jumlah pada variabel n dan pada node, jika pada variabel n lebih kecil jumlahnya dibanding dengan node maka posisi keduanya akan ditukar.

4.1.2.3 Pohon Biner Huffman Modifikasi

Gambar 4.5 Implementasi pembentukan pohon Huffman Modifikasi Pembentukan pohon biner Huffman Modifikasi penulis implementasikan mirip seperti pembentukan pohon biner Huffman Statis, hanya saja terdapat perbedaan pada peletakan node setiap karakter. Ciri khas yang saya berikan pada algoritma ini adalah posisi tiap karakter ganjil dan genap akan menentukan peletakan pada pohon biner,pada implementasi terdapat variabel boolean yaitu isKanan_Ganjil. Variabel ini mempunyai arti jika posisi karakter adalah ganjil, maka akan ditempatkan pada lengan sebelah kanan. Cara kerja algoritma ini, pertama variabel isKanan_Ganjil diberi nilai true karena karakter pertama pasti mempunyai posisi ganjil. Langkah berikutnya akan mengecek sebelah kanan dari cursor jika kosong dan isKanan_Ganjil adalah true maka akan membentuk node baru serta memberi nilai isKanan_Ganjil PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI menjadi false karena pasti posisi karakter berikutnya adalah genap. Jika tidak kosong maka cursor akan menuju ke bawah dan melewati node tersebut. Kemudian jika sebelah kiri dari cursor kosong dan isKanan_Ganjil adalah false maka akan membentuk node baru serta memberi nilai isKanan_Ganjil menjadi true. Jika tidak kosong akan melewati node tersebut dan cursor menuju ke bawah.

4.1.3 Implementasi Proses Analisis Biner

Pada proses ini, akan dibahas tentang pembentukan kode biner1 dan 0 dari hasil pembentukan pohon biner pada proses sebelumnya. Pada implementasi ini akan dibagi menjadi dua, yang pertama yaitu implementasi pada Huffman Statis dan Huffman Modifikasi, serta yang kedua implementasi pada Huffman Dinamis. Kedua implementasi tersebut menggunakan sebuah kelas utama yaitu KodeHuffman, berikut isi dari kelas tersebut : Gambar 4.6 Source code kelas KodeHuffman.java Pada kelas tersebut terdapat dua atribut yaitu huruf dan kode yang masing-masing bertipe String. Kelas ini pada dasarnya berfungsi untuk menyimpan kode biner yang baru dari masing-masing huruf atau karakter. Di dalam kelas terdapat method set dan get untuk mempermudah dalam mengaksesnya. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

4.1.3.1 Implementasi Huffman Statis dan Huffman Modifikasi

Gambar 4.7 Implementasi analisis biner Huffman Statis dan modifikasi method generateKode Dalam proses ini nantinya terdapat dua method, salah satunya adalah method generateKode. Method ini secara garis besar berfungsi untuk menentukan kode biner yang baru dari masing-masing karakter. Di dalam potongan program di atas, dapat dibagi menjadi dua proses yaitu proses membentuk pohon biner dengan membuat objek dari kelas BinaryTree dan proses mencari kode di dalam pohon biner. Pencarian kode tersebut dilakukan dengan memanggil method berikutnya yaitu method find dengan parameter objek pohon biner dan karakter yang di cari. Dalam method ini terdapat perbedaan antara algoritma Huffman Statis dan Huffman Modifikasi, perbedaan tersebut didasarkan pada bentuk pohon biner yang berbeda dari kedua algoritma. Gambar 4.8 Implementasi analisis biner Huffman Statis method find Method find tersebut digunakan untuk algoritma Huffman Statis, di mana jika dilihat hanya mengecek sebelah kanan dari pohon biner. Cara kerja dari proses ini, pertama program akan terus berulang hingga cursor sama dengan null. Program akan mengecek sebelah kanan, apakah data di node sama dengan data yang dicari. Jika sesuai maka kode akan berisi 1 sertacursor akan berubah menjadi null dan looping berhenti. Jika sebelah kanan data dalam node tidak sesuai dengan data yang dicari maka kode akan berisi 0 dan cursor akan berpindah ke bawah serta berulang untuk kembali mengecek dari awal. Tetapi jika sebelah kiri tidak ada kata “simpul” hal itu berarti tidak ada cabang di bawahnya maka program akan berhenti looping dengan membuat cursor menjadi null. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Gambar 4.9 Implementasi analisis biner Huffman Modifikasi method find Method find tersebut digunakan untuk algoritma Huffman Modifikasi, terlihat lebih panjang karena program harus mengecek lengan sebelah kanan dan kiri. Hal itu dikarenakan pohon biner pada algoritma ini menggunakan semua lengannya untuk menyimpan karakter. Pada program tersebut terdapat variabel boolean kanan yang diberi nilai awal true. Variabel ini berfungsi supaya program mengecek lengan sebelah kanan terlebih dahulu, jika sebelah kanan sudah tidak ada data dan karakter yang dicari belum ditemukan maka variabel kanan menjadi false. Perubahan nilai variabel kanan menjadi falseini membuat program akan berpindah ke lengan sebelah kiri dimulai kembali dari atas root. Jika data tidak ditemukan maka proses akan berhenti dari looping.

4.1.3.2 Implementasi Huffman Dinamis

Gambar 4.10 Implementasi analisis biner Huffman Dinamis method generateCode Pada implementasi Huffman Dinamis, proses analisis biner hampir sama seperti pada Huffman Statis atau Huffman Modifikasi. Terdapat dua method yang akan digunakan yaitu generateCode dan prosesGenerate dengan parameter objek dari BinaryTree. Pada method prosesGenerate berfungsi untuk mencari kode baru pada setiap karakter yang sudah dimasukan di dalam pohon biner. Proses pemasukan karakter terdapat di dalam method generateCode. Untuk proses analisis biner Huffman Dinamis ini juga menggunakan kelas KodeHuffman yang sudah dibahas sebelumnya. Gambar 4.11 Implementasi analisis biner Huffman Dinamis method prosesGenerate Di dalam method prosesGenerate ini berbeda dengan method find pada algoritma Huffman yang lain. Di sini penulis mengecek bukan dengan karakter yang dicari, melainkan dari atas ke bawah dengan mengganti jumlah frekuensi menjadi 0. Hal ini saya lakukan karena tidak mungkin ada frekuensi karakter berjumlah 0 pada saat karakter masuk ke dalam pohon biner. Setiap karakter yang baru dicek akan di masukan ke dalam Arraylist dan mengganti frekuensi jumlahnya menjadi 0. Program akan melewati node jika jumlahnya adalah 0 dan akan berhenti looping jika sudah tidak ada node di sebelah kanan.

4.1.4 Implementasi Proses Encoding

Proses encoding merupakan sebuah proses di mana program akan mengubah setiap karakter pada data teks menjadi sekumpulan kode biner yang baru. Pada implementasi proses ini, akan dibagi menjadi dua bagian yaitu implementasi encoding pada Huffman Modifikasi, implementasi encoding pada Huffman Statis dan Huffman Dinamis.

4.1.4.1 Implementasi Encoding Huffman Statis dan Huffman Dinamis

Gambar 4.12 Implementasi encoding Huffman Statis dan Dinamis Implementasi pada Huffman Statis dan Huffman Dinamis mempunyai proses yang sama, karena pada dasarnya pembentukan pohon biner kedua algoritma tersebut juga sama. Pembentukan pohon biner yang hanya menggunakan lengan sebelah kanan memberikan dampak positif serta mempermudah dalam proses ini. Dampak yang dihasilkan adalah tidak adanya kode biner yang bersifat ambigu, yang berarti akhiran dari sebuah kode bukan merupakan awalan dari kode yang lain. Pada method tersebut terdapat dua buah parameter yaitu Arraylist kelas KodeHuffman dan data seluruh isi teks bertipe String. Cara kerja dari method ini adalah membandingkan setiap karakter pada data teks dengan Arraylist KodeHuffman, sehingga hasil dari proses ini berupa data String yang berisi kumpulan kode biner.

4.1.4.2 Implementasi Encoding Huffman Modifikasi

Gambar 4.13 Implementasi encoding Huffman Modifikasi Implementasi proses encoding pada algoritma Huffman Modifikasi berbeda dari Huffman Statis atau Huffman Dinamis, perbedaan ini dikarenakan struktur pohon biner yang berbeda dari algoritma lain. Algoritma ini menggunakan semua lengannya untuk menyimpan node. Dampak dari penggunaan semua lengan pada pohon biner, mengakibatkan adanya sifat ambigu. Oleh karena itu penulis membuat sebuah aturan untuk pembatas antar kode yaitu : Kanan separator 0 Kiri separator 1 Aturan tersebut merupakan kebalikan dari kode di setiap lengan. Jika data berada di sebelah kanan mempunyai kode 1, maka akan selalu diakhiri dengan 0 sebagai pembatas untuk kode berikutnya. Jika data berada di sebelah kiri mempunyai kode 0, maka akan diakhiri dengan 1 sebagai pembatasnya. Implementasi dari aturan tersebut dapat dilihat dengan penggunaan fungsi endsWithyang merupakan fungsi dari Java untuk mengecek apakah sebuah data diakhiri oleh karakter yang ditentukan. Cara kerja dari proses encoding algoritma Huffman Modifikasi mirip dengan proses pada algoritma Huffman Statis atau Huffman Dinamis,yaitu dengan mencocokan setiap karakter pada data teks dengan Arraylist Kode Huffman. Perbedaandari ketiga algoritma, pada algoritma Huffman Modifikasi hanya ditambah dengan aturan pembatas.

4.1.5 Implementasi Proses Simpan File Hasil Kompresi

Proses selanjutnya adalah menyimpan sekumpulan kode biner hasil proses sebelumnya ke dalam bentuk file hasil dari kompresi. Pada proses ini setiap kode biner akan di simpan dalam bentuk bit yang merupakan satuan terkecil dalam file. Proses ini penulis membuat menjadi tiga bagian yaitu proses preprocessing, proses simpan file log dan proses simpan file kompresi. Ketiga proses tersebut diimplementasikan ke dalam tiga method yang semuanya berada di kelas EncoderStream.java.

4.1.5.1 Implementasi Preprocessing

Gambar 4.14 Implementasi preprocessing Ketiga proses yang terdapat pada tahap ini, proses inilah yang paling penting dan utama karena kode biner bertipe String tersebut akan dipecah menjadi 7 karakter. Dasar dari pemecahan ini, karena panjang maksimal setiap karakter menurut standar ASCII yaitu 8 = 256 bit atau ditulis dalam biner 10000000. Pemecahan menjadi 7 karakter ini berguna untuk mengantisipasi jika terdapat kode biner yang lebih dari 256 bit. Sebagai contoh : Kode biner = 10000001001 Pemecahan 8 karakter = 10000001 001 Pemecahan 7 karakter = 1000000 1001 Jika dilakukan pemecahan 8 karakter maka akan membentuk sebuah karakter yang mempunyai nilai biner 257 atau lebih dari standar ASCII. Jika terdapat sebuah karakter yang lebih dari 256 nilai binernya, maka standar harus diubah menjadi Unicode di mana panjang maksimal setiap karakter adalah 6 . Standar pembentukan karakter pada penelitian ini menggunakan ASCII. Pada implementasi program, pemecahan dilakukan dengan ekspresi modulo. Setelah dilakukan pemecahan, program akan mengubah kode biner yang bertipe String menjadi bertipe Integer dengan perintah Integer.parseIntString code,2. Perintah tersebut mempunyai arti mengubah data menjadi kode biner dan hasilnya bertipe Integer. Angka 2 diambil dari bilangan yang di pangkat dalam penghitungan biner. Setelah didapat kode biner yang sudah siap diproses, maka selanjutnya mencari karakter yang sesuai dengan kode biner nilai biner. Pencarian tersebut menggunakan perintah new Charactercharint data. Perintah tersebut akan PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI secara otomatis mendapatkan karakter yang sesuai dengan nilai biner. Langkah terakhir adalah menyimpan karakter yang telah diperoleh ke dalam Arraylist untuk diproses selanjutnya.

4.1.5.2 Implementasi Simpan File Log

Gambar 4.15 Implementasi proses simpan file log Proses ini berfungsi untuk menyimpan data huruf dan kode biner yang baru berupa Arraylist dengan tipe kelas KodeHuffman.java. Pada method ini menggunakan stream bertipe objek untuk memudahkan dalam menyimpannya supaya tidak terpisah antara data huruf dan kode biner. File hasil disimpan dalam folder “logs” di dalam project dengan tipe data .LDT yang merupakan singkatan dari Logs Data. Untuk nama menggunakan waktu saat file dibuat dengan format tanggal, bulan, tahun, jam, menit dan detik yang digabung menjadi satu. Penamaan hingga satuan detik berguna untuk membuat file yang unik antara satu dengan yang lain.

4.1.5.3 Implementasi Simpan File Kompresi

Gambar 4.16 Implementasi proses simpan file kompresi Proses selanjutnya berfungsi untuk menyimpan file hasil kompresi yang telah diubah kodenya ke dalam sebuah file baru bertipe .NFC yang telah dibahas pada bab sebelumnya. Di dalam method ini menggunakan kelas dari Java yaitu PrintWriter yang merupakan salah satu cara dalam melakukan proses stream. Salah satu keunggulan menggunakan kelas tersebuat adalah kita dapat menentukan tipe dari hasil encoding teks. Dalam method tersebut menggunakan tipe “windows-1252” yang berarti encoding yang digunakan menggunakan standard ANSI American National Standards Institute. Alasan saya menggunakan ANSI, karena pada skripsi ini hanya menggunakan 8 bit atau dengan total hanya 256 kombinasi. Jika saya menggunakan tipe “utf-8” akan terlalu banyak bit yang tidak digunakan karena dalam tipe tersebut menggunakan 32 bit. Pada method tersebut terdapat kata “sb” yang digunakan sebagai pemisah dan merupakan singkatan dari sub. Pemisah ini digunakan untuk mempermudah dalam proses decoding. Pemisah tersebut memisahkan nama file log, jenis algoritma yang digunakan dan isi dari kode biner yang baru.

4.2 Proses Decoding