Selasa, 28 Desember 2010

PRATIKUM LINUX : Bab X, Firewall dasar

BAB I

DASAR TEORI

Firewall adalah sebuah sistem atau perangkat yang mengizinkan lalu lintas jaringan yang dianggap aman untuk melaluinya dan mencegah lalu lintas jaringan yang tidak aman. Firewall didesain untuk mengijinkan trusted data atau data yang dipercaya lewat, menolak layanan yang mudah diserang, mencegah jaringan internal dari serangan luar yang bisa menembus firewall setiap waktu. Umumnya juga digunakan untuk mengontrol akses terhadap siapa saja yang memiliki akses terhadap jaringan pribadi dari pihak luar.

Jenis - jenis Firewall :

Pada Linux ada dua jenis firewall yaitu packet filter dan proxy servers.

a. Packet filter dibagi menjadi 2 yaitu :

1. Forwarding

2. Masquerading

b. Firewall proxy servers juga dibagi menjadi dua yaitu :

a. Standard

b. Transparent


BAB II

PEMBAHASAN

Dalam pembahasan kali ini menjelaskan bagaimana menggunakan iptables untuk menyaring paket masuk ataupun keluar dan melewati komputer kita.

1. Langkah pertama kita harus mengecek apakah iptables kita sudah ada dalam komputer yang kita gunakan dengan perintah sudo dpkg -l | grep iptables pada terminal, setelah kita cek dan iptables sudah ada dalam kompuetrkita maka kita akan mengubah konfigurasi yang awalnya 0 menjadi 1 dengan perintah sudo echo “1” > /proc/sys/net/ipv4/ip_forward setelah itu kita cek lagi apakahh value nya sudah berubah jika sudah berubah maka ip_forwardnya sudah bernilai true atau sudah aktif, setelah itu kita nyalakan iptablesnya dengan perintah sudo /etc/init.d/iptables start kemudian kita lihat aturannya dengan perintah sudo iptables -L

2. Selanjutnya kita lakukan penolakan pada semua paket yang ingin masuk ke sistem kita dengan perintah sudo iptables -A INPUT -j DROP atau jika kita menolak semua paket data yang keluar maka kita bisa ketikan perintah sudo iptables -AOUTPUT -j REJECT kemudian kita cek apakah perintah tersebut berhasil dengan perintah ping

3. Sedangkan untuk memblok data berdasarkan protocol kita dapa gunakan perintah sudo iptables –A input –p tcp -j DROP, jika kita tidak tahu nama - nama protocol yang ada maka kita dapat mengeceknya terlebih dahulu dengan perintah sudo cat /etc/protocols atau dengan sudo cat /etc/services untuk melihat portnya

BAB III

KESIMPULAN

Dari pembahasan di atas dapat disimpulkan bahwa :

1. Firewall bisa memblok koneksi dari jaringan atau IP tertentu. Selain itu mekanisme filter juga memudahkan kita dalam mensetting Firewall sehingga lebih fleksible dalam pengaksesan.

2. Fungsi dari firewall adalah :

a. Packet Filtering : memeriksa header dari paket TCP/IP ( tergantung arsitektur jaringannya, dalam contoh ini adalah TCP IP ) dan memutuskan apakah data ini memiliki akses ke jaringan.

b. Network Address Translation ( NAT ) : biasanya sebuah jaringan memiliki sebuah IP public dan di dalam jaringan sendiri memiliki IP tersendiri. Firewall berfungsi untuk meneruskan paket data dari luar jaringan ke dalam jaringan dengan benar sesuai IP komputer lokal.

c. Application Proxy : firewall bisa mendeteksi protocol aplikasi tertentu yang lebih spesifik.

d. Traffic management : mencatat dan memantau trafik jaringan.

PRATIKUM LINUX : Bab IX, Routing

Routing
Router adalah sebuah konfigurasi pada jaringan komputer yang bertugas untuk menguhubungkan dua atau lebih jaringan komputer yang berbeda.
Tugas pokok router :
1. Penentuan jalur yang paling optimal
2. Mengirimkan pengiriman informasi dari satu komputer ke komputer yang lain, dimana ke dua komputer tersebut berada pada jaringan yang berbeda.
Keuntungan menggunakan router dengan PC Linux :
1. Murah
2. Fleksibel
3. Stabil
4. Mudah dikonfigurasi
5. Expandable
Menurut tipe Algoritmanya router ada 7 yaitu :
a. Router static atau dinamic
b. Single path atau Multi path
c. Link state dan distance vektor
d. Routing Global dan Decentralized
e. Intradomain dan interdomain
f. Flat dan Hierarchical
g. Host-inteligent dan Router-inteligent

Dalam pembahasan kali ini akan menjelaskan bagaimana cara mengubah komputer kita menjadi router.
1. Kita buat dulu IP address dengan perintah ifconfig eth0, setelah itu kita cek dengan perintah ifconfig, jika IP address yang ada pada eth0 sudah berbah maka pembuatan IP address sudah berhasil, setelah itu kita buat 2 IP alias yaitu eth0:1 dan eth0:2 lakukan dengan perintah yang sama, untuk mengecek apakah sudah berhasil kita gunakan juga perintah ifconfig

Kesimpulannya adalah :
a. Kita tidak akan bisa melakukan routing juka kita tidak memiliki router pada network kita
b. Hal yang perlu diketahui dalam melakukan routing :
1. Alamat tujuan
2. Router-router tetangga dari mana sebuah router bisa mempelajari tentang reticulated remote
3. Route yang mungkin ke semua network remote
4. Route terbaik untuk setiap reticulated remote
5. Router menyimpan routing table yang menggambarkan bagaimana menemukan network-netting remote.

PRATIKUM LINUX : Bab VII, Web Server (APACHE)

Instal Wordpress
Siapkan Wordpress (Dalam Flashdisc), Installasi Wordpress dari Flashdisc, Mount flashdisc, dengan cara : Tancapkan Flashdisc, Periksa letak Flashdisc/ nama device Flashdisc dengan perintah (#fdisk –l), Mount flashdisc ke media (sdb1 adalah nama/ letak devicenya) #mount/dev/sdb1/media, Masuk dengan media flashdisc (#cd/media/), Lihat isi flashdisc (#ls), Ekstrak wordpress ke tempat penyimpanan (/home/chronolegionaire/public_html) : (#tar xvfz wordpress-3.0.tar.gs –c /home/chronolegionaire/public_html), Proses pengekstrakan berjalan dan tunggu sampai selesai, Instal links terlebih, dengan cara : (#yast-i links), Buat database (Buka di chronolegionaire.ac.id/phpmyadmin dengan links) Buka chronolegionaire.ac.id/phpmyadmin, dengan cara : #links chronolegionaire.ac.id/phpmyadmin, Masukkan UserId dan Password xampp = UserId : lampp, Password : 1990(password xampp), Masuk di jendela phpmyadmin Pilih bahasa. Masukkan Username dan Password yang di set di xampp (Username : root; Password : root, Buat database dengan tab ke samping. Isi nama database (“wordpress”) create dan tekan enter. Keluar dari links dengan menekan tombol “Q” dan pilih “yes”., Masuk ke konfigurasi vhost dii xampp, dengan perintah : #vi/opt/lamp/etc/extra/httpd-vhost.conf, Edit httpd-vhost, setting dengan :
( NameVirtualHost 192.168.21.1:10
ServerAdmin webmaster@chronolegionaire.ac.id
DocumentRoot /home/chronolegionaire/public_html/wordpress
ServerName chronolegionaire.ac.id
ServerAlias www.chronolegionaire.ac.id
ErrorLog logs/dummy-hostexampel.com-err_log CustomLog logs/dummy-host.exampel.com-access_log common)

Beri tanda pagar (#) pada :
#ServerAdmin webmaster@dummy-host2.example.com
#DocumentRoot /www/dosc/dummy-host2.example.com
#ServerName dummy-host2.example.com
#ErrorLog logs/dummy-host2.example.com
#CustomLog logs/dummy-host2.example.com-access_log common
Lalu Simpan dengan menekan tombol ESC(:wq) enter


Konfigurasi Xampp dengan perintah : #vi/opt/lamp/atc/httpd.conf

Hilangkan tanda pagar pada include etc/extra/httpd-vhosts.conf
Simpan dengan menekan tombol ESC(:wq) Enter.

Masuk ke direektori wordpress yang di ekstrak (/home/chronolegionaire/public_httml/)
#cd/home/prasojoo/public_html/wordpress
#ls
#cp wp-config-sample.php wp-config.php
#vi wp-config.php

Setting
DB_NAME’,’wordpress’
DB_USER’,’root’
DB_PASSWORD’,’’root’
DB_HOST’,’’localhost’
Simpan dengan menekan tombol ESC (:wq) Enter

Restart xampp, dengan cara :
#/opt/lampp/lampp restart

Ubah hak akses ke direktori wordpress, dengan cara
#chmod 777 /home/chronolegionaire/public_html/wordpress


Buka browser. Coba apakah webserver berhasil.
Buka www.chronolegionaire.ac.id
Klik instal.php untuk insatali wordpress



Muncul jendela wordpress instalation. Pilih First Step.

Masuk pada First step.
Masukkan :
Weblog Title : chronolegionaire
Your e-mail : phy_lush@yahoo.com
Pilih Continue to Second Step

Masuk pada Second step (Step akhir).
Kita akan mendapat Username dan Password secara otomatis (Username dan Password untuk login ke webserver)

broser www.chronolegionaire.co.id (Instalasi Sukses)

Instal CMS

Pertama
Installasi Joomla(dengan menggunakan flass
Tancapkan Flashdisc, Periksa letak / nama device flashdisc ( #fdisc-l ), Mount flashdisc ke media dan sdb1 adalah nama/ letak devicenya (#mount/dev/sdb1/media), Masuk dalam media flashdisc (#cd/media/), Lihat isi flasdisc (#ls), Ekstrak Joomla ke /home/chronolegionaire/public_html (#tar xvfs Joomla_1.5.21-Stable-full_Package.tar.gz-C/home/chronolegionaire/publi_html), Proses ekstrak berjalan dan tunggu sampai selesai
Kedua
Buat database. Buka di chronolegionaire.ac.id/phpmyadmin dengan link, Buka chronolegionaire.ac.id/phpmyaddmin, dengan cara (#links chronolegionaire.ac.id/phpmyadmin), Masukkan UserId dan Password Xampp : UserId : lampp, Password : root, Masuk di Jendela phpmyyadmin, pilih bahasa. Masukkan : Username : root Password : root, Buat database dengan tab ke samping isi nama database “Joommla”àcreateàenter, Keluar dari links tekan “Q” dan “Yes”, Masuk konfigurasi vhost di Xampp dengan perintah : #vi/opt/lamp/etc/axtra/httpd-vhosts.conf, Edit httpd-vhosts.

MancVirtualHost 192.168.21.1:80
#
# VirtualHost example:
#Alhost any Apache directive may go into a VirtualHost constainer.
#The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any (VirtualHost) block.
#
(VirtualHost 192.168.21.1:80)
ServerAdmin webmaster@chronolegionaire.ac.id
DocumentRoot /home/chronolegionaire/public_html
Servername chronolegionaire.ac.id
ServerAlias www.chronolegionaire.ac.id
ErrorLog logs/dummy-host.example.com-error_log
CustonLog logs/dummy-host.example.com-access_log commos
(/VirtualHost)

#(VirtualHost -:80)
# ServerAdmin webmaster@dummy-host2.example.com
# DocumentRoot /www/docs/dummy-host2.example.com
# ServerName dummy-host2.example.com
# ErrorLog logs/dummy-host2.example.com-error_log
# CustonLog logs/dummy-host2.example.com.access_log commos
#(/VirtualHost)
:wq
Simpan dengan menekan tombol ESC (:wq)àEnter, Restart Xampp, caranya : #/opt/lampp/lampp restart, Buka browser www.chronolegionaire.ac.id. Pilih bahasa dan klik next



Pada Step ke-2 ternyata ada yang tidak jalan à configuration.php writable



Kita Harus merubah hak akses dengan cara : #chmod 777 /home/chronolegionaire/public_html

Refresh step ke-2



License di Next



Database :
Database Type : mysql
Hostname : localhost
Username : root
Password : root
Database Name : joomla



-Next



Pengisian FTP jika punya isikan, jika tidak di Next



Main Configuration, Isinya :



- Next


Finish. Hapus direktori installation di computer server



Masuk ke directori penyimpanan joomla.
#cd/home/chronolegionaire/public_html/
#rm-r installation/

Buka di browser www.chronolegionaire.ac.id)



-Instal sukses

Rabu, 08 Desember 2010

Java Stream File

Stream, Reader, dan Writer

Tanpa bisa berinteraksi dengan dunia lain, suatu program tidak ada gunanya. Interaksi suatu program dengan dunia lain sering disebut input/output atau I/O. Sejak dulu, salah satu tantangan terbesar untuk mendesain bahasa pemrograman baru adalah mempersiapkan fasilitas untuk melakukan input dan output. Komputer bisa terhubung dengan beragam jenis input dan output dari berbagai perangkat. Jika bahasa pemrograman harus dibuat secara khusus untuk setiap jenis perangkat, maka kompleksitasnya akan tak lagi bisa ditangani.

Salah satu kemajuan terbesar dalam sejarah pemrograman adalah adanya konsep (atau abstraksi) untuk memodelkan perangkat I/O. Dalam Java, abstraksi ini disebut dengan aliran (stream). Bagian ini akan memperkenalkan tentang aliran, akan tetapi tidak menjelaskan dengan komplit. Untuk lebih lengkapnya, silakan lihat dokumen resmi Java.

Ketika berhubungan dengan input/output, kita harus ingat bahwa ada dua kategori data secara umum : data yang dibuat oleh mesin, dan data yang bisa dibaca manusia. Data yang dibuat mesin ditulis dengan model yang sama dengan bagaimana data tersebut disimpan di dalam komputer, yaitu rangkaian nol dan satu. Data yang bisa dibaca manusia adalah data dalam bentuk rangkaian huruf. Ketika kita membaca suatu bilangan 3.13159, kita membacanya sebagai rangkaian huruf yang kita terjemahkan sebagai angka. Angka ini akan ditulis dalam komputer sebagai rangkaian bit yang kita tidak mengerti.

Untuk menghadapi kedua jenis data ini, Java memiliki dua kategori besar untuk aliran : aliran byte untuk data mesin (byte stream), dan aliran karakter (character stream) untuk data yang bisa dibaca manusia. Ada banyak kelas yang diturunkan dari kedua kategori ini.

Setiap objek yang mengeluarkan data ke aliran byte masuk sebagai kelas turunan dari kelas abstrak OutputStream. Objek yang membaca data dari aliran byte diturunkan dari kelas abstrak InputStream. Jika kita menulis angka ke suatu OutputStream, kita tidak akan bisa membaca data tersebut karena ditulis dalam bahasa mesin. Akan tetapi data tersebut bisa dibaca kembali oleh InputStream. Proses baca tulis data akan menjadi sangat efisien, karena tidak ada penerjemahan yang harus dilakukan : bit yang digunakan untuk menyimpan data di dalam memori komputer hanya dikopi dari dan ke aliran tersebut.

Untuk membaca dan menulis data karakter yang bisa dimengerti manusia, kelas utamanya adalah Reader dan Writer. Semua kelas aliran karakter merupakan kelas turunan dari salah satu dari kelas abstrak ini. Jika suatu angka akan ditulis dalam aliran Writer, komputer harus bisa menerjemahkannya ke dalam rangkaian karakter yang bisa dibaca maunsia.

Membaca angka dari aliran Reader menjadi variabel numerik juga harus diterjemahkan, dari deretan karakter menjadi rangkaian bit yang dimengerti komputer. (Meskipun untuk data yang terdiri dari karakter, seperti dari editor teks, masih akan ada beberapa terjemahan yang dilakukan. Karakter disimpan dalam komputer dalam nilai Unicode 16-bit. Bagi orang yang menggunakan alfabet biasa, data karakter biasanya disimpan dalam file dalam kode ASCII, yang hanya menggunakan 8-bit. Kelas Reader dan Writer akan menangani perubahan dari 16-bit ke 8-bit dan sebaliknya, dan juga menangani alfabet lain yang digunakan negara lain.)

Adalah hal yang mudah untuk menentukan apakah kita harus menggunakan aliran byte atau aliran karakter. Jika kita ingin data yang kita baca/tulis untuk bisa dibaca manusia, maka kita gunakan aliran karakter. Jika tidak, gunakan aliran byte. System.in dan System.out sebenarnya adalah aliran byte dan bukan aliran karakter, karenanya bisa menangani input selain alfabet, misalnya tombol enter, tanda panah, escape, dsb.

Kelas aliran standar yang akan dibahas berikutnya didefinisikan dalam paket java.io beserta beberapa kelas bantu lainnya. Kita harus mengimpor kelas-kelas tersebut dari paket ini jika kita ingin menggunakannya dalam program kita. Artinya dengan menggunakan "import java.io.*" di awal kode sumber kita.

Aliran tidak digunakan dalam GUI, karena GUI memiliki aliran I/O tersendiri. Akan tetapi kelas-kelas ini digunakan juga untuk file atau komunikasi dalam jaringan. Atau bisa juga digunakan untuk komunikasi antar thread yang sedang bekerja secara bersamaan. Dan juga ada kelas aliran yang digunakan untuk membaca dan menulis data dari dan ke memori komputer.

Operasi pada Aliran (Stream)

Kelas dasar I/O Reader, Writer, InputStream dan OutputStream hanya menyediakan operasi I/O sangat dasar. Misalnya, kelas InputStream memiliki metode instansi

public int read() throws IOException
untuk membaca satu byte data dari aliran input. Jika sampai pada akhir dari aliran input , metode read() akan mengembalikan nilai -1. Jika ada kesalahan yang terjadi pada saat pengambilan input, maka pengecualian IOException akan dilemparkan. Karena IOException adalah kelas pengecualian yang harus ditangani, artinya kita harus menggunakan metode read() di dalam penyataan try atau mengeset subrutin untuk throws IOException. (Lihat kembali pembahasan tentang pengecualian di bab sebelumnya)

Kelas InputStream juga memiliki metode untuk membaca beberapa byte data dalam satu langkah ke dalam array byte. Akan tetapi InputStream tidak memiliki metode untuk membaca jenis data lain, seperti int atau double dari aliran. Ini bukan masalah karena dalam prakteknya kita tidak akan menggunakan objek bertipe InputStream secara langsung. Yang akan kita gunakan adalah kelas turunan dari InputStream yang memiliki beberapa metode input yang lebih beragam daripada InputStream itu sendiri.

Begitu juga dengan kelas OutputStream memiliki metode output primitif untuk menulis satu byte data ke aliran output, yaitu metode

public void write(int b) throws IOException
Tapi, kita hampir pasti akan menggunakan kelas turunannya yang mampu menangani operasi yang lebih kompleks.

Kelas Reader dan Writer memiliki operasi dasar yang hampir sama, yaitu read dan write, akan tetapi kelas ini berorientasi karakter (karena digunakan untuk membaca dan menulis data yang bisa dibaca manusia). Artinya operasi baca tulis akan mengambil dan menulis nilai char bukan byte. Dalam prakteknya kita akan menggunakan kelas turunan dari kelas-kelas dasar ini.

Salah satu hal menarik dari paket I/O pada Java adalah kemungkinan untuk menambah kompleksitas suatu aliran dengan membungkus aliran tersebut dalam objek aliran lain. Objek pembungkus ini juga berupa aliran, sehingga kita juga bisa melakukan baca tulis dari objek yang sama dengan tambahan kemampuan dalam objek pembungkusnya.

Misalnya, PrintWriter adalah kelas turunan dari Writer yang memiliki metode tambahan untuk menulis tipe data Java dalam karakter yang bisa dibaca manusial. Jika kita memiliki objek bertipe Writer atau turunannya, dan kita ingin menggunakan metode pada PrintWriter untuk menulis data, maka kita bisa membungkus objek Writer dalam objek PrintWriter.

Contoh jika baskomKarakter bertipe Writer, maka kita bisa membuat

PrintWriter printableBaskomKarakter = new PrintWriter(baskomKarakter);
Ketika kita menulis data ke printableBaskomKarakter dengan menggunakan metode pada PrintWriter yang lebih canggih, maka data tersebut akan ditempatkan di tempat yang sama dengan apabila kita menulis langsung pada baskomKarakter. Artinya kita hanya perlu membuat antar muka yang lebih baik untuk aliran output yang sama. Atau dengan kata lain misalnya kita bisa menggunakan PrintWriter untuk menulis file atau mengirim data pada jaringan.

Untuk lengkapnya, metode pada kelas PrintWriter memiliki metode sebagai berikut :

// Metode untuk menulis data dalam
// bentuk yang bisa dibaca manusia
public void print(String s)
public void print(char c)
public void print(int i)
public void print(long l)
public void print(float f)
public void print(double d)
public void print(boolean b)

// Menulis baris baru ke aliran
public void println()

// Metode ini sama dengan di atas
// akan tetapi keluarannya selalu
// ditambah dengan baris baru
public void println(String s)
public void println(char c)
public void println(int i)
public void println(long l)
public void println(float f)
public void println(double d
public void println(boolean b)

Catatan bahwa metode-metode di atas tidak pernah melempar pengecualian IOException. Akan tetapi, kelas PrintWriter memiliki metode

public boolean checkError()
yang akan mengembalikan true jika ada kesalahan yang terjadi ketika menulis ke dalam aliran. Kelas PrintWriter menangkap pengecualian IOException secara internal, dan mengeset nilai tertentu di dalam kelas ini jika kesalahan telah terjadi. Sehingga kita bisa menggunakan metode pada PrintWriter tanpa khawatir harus menangkap pengecualian yang mungkin terjadi. Akan tetapi, jika kita ingin membuat progam yang tangguh tentunya kita harus selalu memanggil checkError() untuk melihat apakah kesalahan telah terjadi ketika kita menggunakan salah satu metode pada PrintWriter.

Ketika kita menggunakan metode PrintWriter untuk menulis data ke aliran, data tersebut diubah menjadi rangkaian karakter yang bisa dibaca oleh manusia. Bagaimana caranya jika kita ingin membuat data dalam bentuk bahasa mesin?

Paket java.io memiliki kelas aliran byte, yaitu DataOutputStream yang bisa digunakan untuk menulis suatu data ke dalam aliran dalam format biner. DataOutputStream berhubungan erat dengan OutputStream seperti hubungan antara PrintWriter dan Writer.

Artinya, OutputStream hanya berisi metode dasar untuk menulis byte, sedangkan DataOutputStream memiliki metode writeDouble(double x) untuk menulis nilai double, writeInt(int x) untuk menulis nilai int, dan seterusnya. Dan juga kita bisa membungkus objek bertipe OutputStream atau turunannya ke dalam aliran DataOutputStream sehingga kita bisa menggunakan metode yang lebih kompleks.

Misalnya, jika baskomByte adalah variabel bertipe OutputStream, maka

DataOutputStream baskomData = new DataOutputStream(baskomByte);
untuk membungkus baskomByte dalam baskomData.

Untuk mengambil data dari aliran, java.io memiliki kelas DataInputStream. Kita bisa membungkus objek bertipe InputStream atau turunannya ke dalam objek bertipe DataInputStream. Metode di dalam DataInputStream untuk membaca data biner bisa menggunakan readDouble(), readInt() dan seterusnya. Data yang ditulis oleh DataOutputStream dijamin untuk bisa dibaca kembali oleh DataInputStream, meskipun data kita tulis pada satu komputer dan data dibaca pada komputer jenis lain dengan sistem operasi berbeda. Kompatibilitas data biner pada Java adalah salah satu keunggulan Java untuk bisa dijalakan pada beragam platform.

Salah satu fakta yang menyedihkan tentang Java adalah ternyata Java tidak memiliki kelas untuk membaca data dalam bentuk yang bisa dibaca oleh manusia. Dalam hal ini Java tidak memiliki kelas kebalikan dari PrintWriter sebagaimana DataOutputStream dan DataInputStream. Akan tetapi kita tetap bisa membuat kelas ini sendiri dan menggunakannya dengan cara yang persis sama dengan kelas-kelas di atas.

Kelas PrintWriter, DataInputStream, dan DataOutputStream memungkinkan kita untuk melakukan input dan output semua tipe data primitif pada Java. Pertanyaannya bagaimana kita melakukan baca tulis suatu objek?

Mungkin secara tradisional kita akan membuat fungsi sendiri untuk memformat objek kita menjadi bentuk tertentu, misalnya urutan tipe primitif dalam bentuk biner atau karakter kemudian disimpan dalam file atau dikirim melalui jaringan. Proses ini disebut serialisasi (serializing) objek.

Pada inputnya, kita harus bisa membaca data yang diserialisasi ini sesuai dengan format yang digunakan pada saat objek ini diserialisasi. Untuk objek kecil, pekerjaan semacam ini mungkin bukan masalah besar. Akan tetapi untuk ukuran objek yang besar, hal ini tidak mudah.

Akan tetapi Java memiliki cara untuk melakukan input dan output isi objek secara otomatis, yaitu dengan menggunakan ObjectInputStream dan ObjectOutputStream. Kelas-kelas ini adalah kelas turunan dari InputStream dan OutputStream yang bisa digunakan untuk membaca dan menulis objek yang sudah diserialisasi.

ObjectInputStream dan ObjectOutputStream adalah kelas yang bisa dibungkus oleh kelas InputStream dan OutputStream lain. Artinya kita bisa melakukan input dan output objek pada aliran byte apa saja.

Metde untuk objek I/O adalah readObject() yang tersedia pada ObjectInputStream dan writeObject(Object obj) yang tersedia dalam ObjectOutputStream. Keduanya bisa melemparkan IOException. Ingat bahwa readObject() mengembalikan nilai bertipe Object yang artinya harus di-type cast ke tipe sesungguhnya.

ObjectInputStream dan ObjectOutputStream hanya bekerja untuk objek yang mengimplementasikan interface yang bernama Serializable. Lbih jauh semua variabel instansi pada objek harus bisa diserialisasi, karena interface Serializable tidak mempunyai metode apa-apa. Interface ini ada hanya sebagai penanda untuk kompiler supaya kompiler tahu bahwa objek ini digunakan untuk baca tulis ke suatu media.

Yang perlu kita lakukan adalah menambahkan "implements Serializable" pada definisi kelas. Banyak kelas standar Java yang telah dideklarasikan untuk bisa diserialisasi, termasuk semua komponen kelas Swing dan AWT. Artinya komponen GUI pun bisa disimpan dan dibaca dari dalam perangkat I/O menggunakan ObjectInputStream dan ObjectOutputStream.