Laman


Selasa, 05 Juni 2012

All about IO Stream

What is IO Stream ?

IOStream merupakan sumber input atau output tujuan. Sebuah stream dapat mewakili berbagai macam sumber dan tujuan, termasuk file disk, perangkat, program lain, dan array memori. IOStream mendukung banyak jenis data, termasuk byte sederhana, tipe data primitif, karakter lokal, dan objek. Beberapa aliran sekedar menyampaikan data, orang lain memanipulasi dan mengubah data dengan cara yang bermanfaat. Kira-kira dapat dianalogikan seperti ini.
Alur program menggunakan inputstream untuk membaca data dari sebuah sumber
Alur program menggunakan output stream untuk menulis data ke tujuan

Tipe-tipe stream yang digunakan

1.         Stream Karakter dan Byte 

            Secara umum ada dua tipe dari stream, yaitu stream karakter dan byte. Kita hanya mengulang perbedaan mendasar antara keduanya. Stream byte adalah abstraksi file atau alat untuk data biner sedangkan stream karakter adalah untuk karakter Unicode.

2.         Stream Input dan Output

                  Class InputStream dan class Reader adalah superclass-superclass dari semua input stream. Class OutputStream dan class Writer adalah class-class root dari semua output stream. Input stream juga dikenal sebagai stream sumber (source stream) sejak kita memperoleh informasi dari stream ini. sementara itu output stream disebut juga stream hasil(sink stream).

3.         Node dan Filter Stream    
                
                  Stream node adalah sebuah stream dengan fungsi dasar berupa fungsi membaca atau menulis dari sebuah lokasi khusus seperti pada disk atau dari jaringan. Filter Stream adalah suatu stream yang diletakkan pada layer stream node diantara threads atau proses untuk menyediakan fungsi tambahan yang tidak dapat ditemukan dalam stream node oleh stream node itu sendiri. 

Stream Chaining ?
Pada intinya, stream chaining adalah penambahan lapisan pada sebuah stream node.

Class-class File

Class File  adalah  sebuah  perwakilan  dari  abstraksi  dari  file-file  nyata  dan  nama  path direktori.
Berikut contoh Penerapan Code pada Class File :
Perhatian !  untuk warna font merah berarti menandakan bahwa hal tersebut adalah method file.
import java.io.*;
public class dessy_11 {
public static void main(String args[]) {
String fileName = args[0];
$0A/* Instansiasi sebuah object File dengan nama path khusus sebagai nama filenya */
File fn = new File(fileName);
/* Mengembalikan nilai nama file atau nama direktori dari object   File ini */
System.out.println("Name: " + fn.getName());
/* Menguji apakah sebuah file atau sebuah direktori masih ada atau tidak */
if (!fn.exists()) {
System.out.println(fileName + " does not exists.");
/* Membuat sebuah temporary directory */
System.out.println("Creating temp directory...");
fileName = "temp";
/* Pembuatan objek baru */
fn = new File(fileName);
/*  Membuat sebuah direktori yang merupakan abstraksi nama path ini */
fn.mkdir(); 
System.out.println(fileName + (fn.exists()? "exists": "does not exist"));
System.out.println("Deleting temp directory...");
/*  Membuang file atau direktori yang sebenarnya diwakili oleh object File tersebut */
fn.delete();
System.out.println(fileName + (fn.exists()? "exists": "does not exist"));
return;
}
/* Menguji apakah objek ini berupa sebuah file atau bukan */
System.out.println(fileName + " is a " + (fn.isFile()? "file." 
:"directory."));
if (fn.isDirectory()) {
/* Mengembalikan nilai daftar  file dan subdirektori yang ada                        dalam object ini. Object ini haruslah berupa sebuah direktori */
String content[] = fn.list();
System.out.println("The content of this directory:");
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
}
/*  Mengembalikan  nilai  true  jika  dijinkan  untuk  membaca   dari  file.  Sebaliknya,  nilai pengembaliannya bernilai false */
if (!fn.canRead()) {
System.out.println(fileName + " is not readable.");
return;
}
/* Mengembalikan nilai ukuran dari file */
System.out.println(fileName + " is " + fn.length() + " bytes long.");
/* Mengembalikan nilai tanggal dalam milidetik ketika file terakhir kali dimodifikasi */
System.out.println(fileName + " is " + fn.lastModified() + " bytes long.");
/*Mengembalikan nilai  true  jika diijinkan untuk menulis ke sebuah  file. Sebaliknya, nilai pengembaliannya bernilai false */
if (!fn.canWrite()) {
System.out.println(fileName + " is not writable.");
}
}
}

Class Reader & Class Writer

Class Reader adalah suatu stream yang menggambarkan stream karakter yang digunakan untuk membaca sedangkan Class Writer adalah suatu stream yang menggambarkan  stream karakter  yang  digunakan  untuk menulis. 




Berikut contoh Penerapan Code pada Class Reader & Class Writer :

Perhatian !  untuk warna font merah berarti menandakan bahwa hal tersebut adalah Class Node & Filter Reader atau Writer

import java.io.*;
class dessy_11 {
void copy(String input, String output) {
/* Mengizinkan  penyimpanan  sementara  karakteryang  bertujuan  untuk  menyediakan fasilitas pembacaan karakter, arrays, dan bait */
/* Menyediakan  penyangga  karakter  bertujuan  untuk  menyediakan  efisiensi  penulisan karakter, array, dan garis */
BufferedReader reader; BufferedWriter writer; String data;
try {
      /* Untuk membaca karakter ke sebuah file */
reader = new BufferedReader(new FileReader(input));
/* Untuk menulis karakter ke sebuah file */
writer = new BufferedWriter(new FileWriter(output));
while ((data = reader.readLine()) != null) {
writer.write(data, 0, data.length());
}
reader.close();
writer.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
}

 Class InputStream & Class OutputStream

Class InputStream adalah suatu stream yang menggambarkan perbedaan stream byte yang digunakan membaca sedangkan Class OutputStream adalah suatu stream yang menggambarkan tentang byte stream yang berbeda yang digunakan dalam proses penulisan.




Berikut contoh Penerapan Code pada Class InputStream & Class OutputStream :

Perhatian !  untuk warna font merah berarti menandakan bahwa hal tersebut adalah Class Node & Filter InputStream atau OutputStream

import java.io.*;
class IO04 {
void copy(String input, String output) {
      /* Untuk membaca Line byte dari sebuah file */
FileInputStream inputStr;
/* Untuk menulis byte ke sebuah file */
FileOutputStream outputStr;
int data;
try {
inputStr = new FileInputStream(input);
outputStr = new FileOutputStream(output);
while ((data = inputStr.read()) != -1) {
outputStr.write(data);
}
inputStr.close();
outputStr.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
}

 Serialisasi ?

Serialisasi digunakan untuk  menulis suatu object stream, sedangkan Deserialisasi digunakan untuk membaca sebuah object stream. 

Berikut contoh source code pada serialized :

import java.io.*;
public class SerializeBoolean {
SerializeBoolean() {
Boolean booleanData = new Boolean("true");
try {
FileOutputStream fos = new
FileOutputStream("boolean.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(booleanData);
oos.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static void main(String args[]) {
SerializeBoolean sb = new SerializeBoolean();
}
}

Berikut contoh source code pada deserialized :

import java.io.*;
public class UnserializeBoolean { UnserializeBoolean() {
Boolean booleanData = null;
try {
FileInputStream fis = new
FileInputStream("boolean.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
booleanData = (Boolean) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Unserialized Boolean from " +
"boolean.ser");
System.out.println("Boolean data: " + booleanData);
System.out.println("Compare data with true: " +
booleanData.equals(new Boolean("true")));
}
public static void main(String args[]) {
UnserializeBoolean usb = new UnserializeBoolean();
}
}

 Keyword transcient ?

            Kata kunci transcient berguna sebagai mencagah data dari proses serialisasi. Sebuah  class  yang mengandung  object  yang  tidak  diserialisasi dapat  tetap  diserialisasi  jika  penunjuk  ke  object  non-serialisasi  ditandai  dengan kata kunci transient, seperti pada contoh code berikut :

/* class dessy_11 mengimplementasikan method dari class Serializable , untuk lebih lengkapnya simak postingan Belajar PBO II */

class dessy_11 implements Serializable {
   transient Thread thread;  /* mencoba me-remove transcient */
   int data;  /* beberapa data yang lain */
}

5 komentar:

  1. terima kasih, artikelnya cukup membantu. :)

    BalasHapus
  2. artikel yang anda post telah membantu saya menyelesaikan tugas java yang diberikan guru saya di sekolah.. thanks ya,,

    BalasHapus