Rabu, 24 September 2014

Menyimpan Object Class dengan Serialisasi


Agak sulit membayangkan sebuah data yang mempunyai beberapa hasil keluaran berupa array 2Dimensi disimpan dalam bentuk tabel seperti layak nya  database pada umum nya. Misalkan saja suatu data dihasilkan dari proses perhitungan didapatkan keluaran 2 variabel yaitu matrix variabel dengan nama bobot hidden dan bobot output. Tentu matrix tersebut tidak fleksible jika dimasukan kedalam sebuah tabel ataupun disimpan dalam bentuk format CSV. Hal tersebut dapat dipecahkan dengan teknik serialisasi, bahasa modern saat ini telah banyak mendukung serialisasi seperti java, C#. Teknik nya menggunakan konsep POJO yaitu berupa class berisi set get dengan implementasi serialisasi




Sehingga variabel bobot hidden dan bobot ouput dibungkus menggunakan class yang mengimplementasikanserialisasi, kemudian class tersebut dapat dibungkus lagi menggunakan ArrayList. Berikut contoh nya


       

import java.io.Serializable;

/**
 *
 * @author www.softscients.web.id
 */
public class DataPerhitungan implements Serializable{
    private double [][] bobotHidden;
    private double [][] bobotOutput;

    public DataPerhitungan(double [][] hidden, double [][]output)
    {
        this.bobotHidden = hidden;
        this.bobotOutput = output;
    }

    public double[][] getBobotHidden() {
        return bobotHidden;
    }


    public void setBobotHidden(double[][] bobotHidden) {
        this.setBobotHidden(bobotHidden);
    }



    public double[][] getBobotOutput() {
        return bobotOutput;
    }


    public void setBobotOutput(double[][] bobotOutput) {
        this.bobotOutput = bobotOutput;
    }
    
}


       
 





Class diatas dapat disimpan  layak sebuah file, seperti contoh berikut


       
import java.io.*;
import java.util.ArrayList;

/**
 *
 * @author www.softscients.web.id
 */
public class Contoh {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
            Contoh.simpan();
            Contoh.baca();
    }
    public static void simpan()
    {
        System.out.println("==== DATA DISIMPAN ====");
        ArrayList  data  = new ArrayList();
        data.add(new DataPerhitungan(   new double [][]{{1,2,3},{4,5,6}}, // data ke 1
                                                                new double [][]{{7,8,9},{10,11,12},{13,14,15}}
                                                        ));
        data.add(new DataPerhitungan(   new double [][]{{16,17,18},{19,20,21}}, // data ke 2
                                                                new double [][]{{22,23,24},{25,26,27},{28,29,30}}
                                                        ));
        Contoh.tampilkan(data);
        //kita akan menyimpan kedalam file 
        File file = new File("D:/data.serial");
        FileOutputStream fos = null;
        ObjectOutputStream out = null;
        try {
            fos = new FileOutputStream(file.getAbsolutePath());
            out = new ObjectOutputStream(fos);
            out.writeObject(data);
            out.close();
        } catch(IOException ex) {
            ex.printStackTrace();
        }
        
    }
    public static void baca()
    {
        System.out.println("==== DATA DIBUKA ====");
        ArrayList  model = null;
        File file = new File("D:/data.serial");
        FileInputStream fis=null;
        ObjectInputStream in=null;
        try {
            fis=new FileInputStream(file.getAbsolutePath());
            in =new ObjectInputStream(fis);
            try {
                model =  (ArrayList) in.readObject();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
            in.close();
        }catch(IOException ex) {
            ex.printStackTrace();
        }
        Contoh.tampilkan(model);
    }
    public static void tampilkan(ArrayList  data)
    {
        for(int k = 0;k



Class dapat disimpan dalam bentuk file kemudian di load. Berikut hasil dari run diatas


       

==== DATA DISIMPAN ====
	data ke 1
Bobot Hidden
1.0	2.0	3.0	
4.0	5.0	6.0	
Bobot Output
7.0	8.0	9.0	
10.0	11.0	12.0	
13.0	14.0	15.0	
	data ke 2
Bobot Hidden
16.0	17.0	18.0	
19.0	20.0	21.0	
Bobot Output
22.0	23.0	24.0	
25.0	26.0	27.0	
28.0	29.0	30.0	
==== DATA DIBUKA ====
	data ke 1
Bobot Hidden
1.0	2.0	3.0	
4.0	5.0	6.0	
Bobot Output
7.0	8.0	9.0	
10.0	11.0	12.0	
13.0	14.0	15.0	
	data ke 2
Bobot Hidden
16.0	17.0	18.0	
19.0	20.0	21.0	
Bobot Output
22.0	23.0	24.0	
25.0	26.0	27.0	
28.0	29.0	30.0	


       
 



Dengan teknik tersebut maka hal yang sangat mudah untuk menyimpan sebuah variabel dalam  1 wadah berupa class yang dapat ditulis kedalam file biner dan dapa dibaca kembali. Kasus lain misalkan sebuah penelitian mengolah data informasi gen dari tiap pasien yang menghasilkan keluaran berupa kombinasi tiap kromosom, tentu hal itu akan sangat sulit dimasukan kedalam sebuah database seperti relational database karena masih menggunakan konsep table bukan konsep object. Penulis seringkali menggunakan teknik ini untuk menyimpan sebuah class model hasil pelatihan sebuah algoritma jaringan syarat tiruan yang terdiri dari beberapa gabungan matrix untuk 1 kali proses pelatihan.






Bisa dibayangkan bukan! Hal yang sulit bila model tersebut hanya disimpan dalam bentuk tabel seperti tabel di mysql! Karena konsep diatas semua nya berbasis konsep object
Posting Komentar