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 */
}