JENI_Slides-Intro2-Bab12-IOStream
Download
Report
Transcript JENI_Slides-Intro2-Bab12-IOStream
I/O Stream lanjutan
Pengenalan Pemrograman 2
Versi 2.0
Topik
Jenis Stream yang umum
Stream Karakter dan Byte
Stream Input dan Output
Stream Node dan Filter
Class-class File
Class-class Reader
Method-method Reader
Class-class Node Reader
Class-class Filter Reader
Topik
Class-class Writer
Method Writer
Class-class Node Writer
Class-class Filter Writer
Class-class InputStream
Method-method InputStream
Class-class Node InputStream
Class-class Filter InputStream
Topik
Class-class OutputStream
Method method OutputStream
Class-class Node OutputStream
Class-class Filter OutputStream
Serialisasi
Kata kunci transient
Serialisasi: Menulis sebuah Stream
Object
Deserialisasi: Membaca sebuah stream
object
Jenis stream yang umum
Stream
Keadaan dari sebuah file atau sebuah device
yang memungkinkan rangkaian item dapat
dibaca atau ditulis
Kategori-kategori Stream yang umum
Stream Character dan Byte
Stream Input dan Output
Stream Node dan Filter
Stream Karakter dan Byte
Stream Karakter
Keadaan File atau device untuk karakter Unicode
Superclass dari semua class-class untuk stream
karakter :
◦Class Reader
◦Class Writer
◦Kedua class tersebut adalah abstract
Stream Byte
Untuk data biner
Class-class root untuk stream byte :
◦Class InputStream
◦ClassOutputStream
◦Kedua class tersebut adalah abstract
Stream Input dan Output
Input atau stream sumber
Dari stream ini dapat membaca
Superclass dari semua input streams:
◦ class InputStream
◦ class Reader
Output
Kita dapat menulis pada stream ini
Class root dari stream ini:
◦ Class OutputStream
◦ Class Writer
Stream Node dan Filter
Stream Node
Terdiri atas fungsi dasar dari membaca atau
menulis dari sebuah lokasi tertentu.
Pada jenis stream node termasuk didalamnya file,
memory, dan saluran data
Stream Filter
Di masukkan ke lapisan stream node antara thread
atau proses
Untuk fungsi-fungsi tambahan
Menambahkan layer pada sebuah stream node yang
disebut dengan stream chaining
Class File
Bukan merupakan sebuah class stream
Penting karena class-class stream memanipulasi
object File
Representasi abstract dari file-file aktual dan directory
pathnames
Class File : Konstruktor
Memiliki 4 konstruktor
Class File : Method
Class File : Method
Contoh Class File
import java.io.*;
public class FileInfoClass {
public static void main(String args[]) {
String fileName = args[0];
File fn = new File(fileName);
System.out.println("Name: " + fn.getName());
if (!fn.exists()) {
System.out.println(fileName + " does not exists.");
//bersambung...
Contoh Class File
/* Membuat sebuah directory sementara */
System.out.println("Creating temp
directory...");
fileName = "temp";
fn = new File(fileName);
fn.mkdir();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
System.out.println("Deleting temp directory...");
fn.delete();
//bersambung...
Contoh Class File
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
return;
}//end of: if (!fn.exists())
System.out.println(fileName + " is a " +
(fn.isFile()? "file." :"directory."));
if (fn.isDirectory()) {
String content[] = fn.list();
System.out.println("The content of this
directory:");
//bersambung...
Contoh class File
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
} //end of: if (fn.isDirectory())
if (!fn.canRead()) {
System.out.println(fileName
+ " is not readable.");
return;
}
//bersambung...
Contoh Class File
System.out.println(fileName + " is " + fn.length()
+ " bytes long.");
System.out.println(fileName + " is " +
fn.lastModified() + " bytes long.");
if (!fn.canWrite()) {
System.out.println(fileName
+ " is not writable.");
}
}
}
Method Class Reader
Method Class reader
Class-class Node reader
Class Filter Reader
Method dari Class Writer
Class Node Writer
Class Filter Writer
Contoh Dasar Reader/Writer
1
import java.io.*;
2
class CopyFile {
void copy(String input, String output) {
FileReader reader;
FileWriter writer;
int data;
try {
reader = new FileReader(input);
writer = new FileWriter(output);
//berlanjut...
3
4
5
6
7
8
9
10
Contoh Dasar Reader/Writer
12
13
14
15
16
17
18
19
20
21
while ((data = reader.read()) != -1) {
writer.write(data);
}
reader.close();
writer.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
//berlanjut...
Contoh Dasar Reader/Writer
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
22
23
24
25
26
27
28
}
Contoh Reader/Writer Lanjut
1
2
3
4
5
6
7
8
9
10
11
12
import java.io.*;
class CopyFile {
void copy(String input, String output) {
BufferedReader reader;
BufferedWriter writer;
String data;
try {
reader = new
BufferedReader(new FileReader(input));
writer = new
BufferedWriter(new FileWriter(output));
//berlanjut...
Contoh Reader/Writer Lanjut
13
14
15
16
17
18
19
20
21
22
while ((data = reader.readLine()) != null) {
writer.write(data, 0, data.length);
}
reader.close();
writer.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
//berlanjut...
Contoh Reader/Writer Lanjut
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
23
24
25
26
27
28
29
}
Method Class InputStream
Method Class InputStream
Method Class InputStream
Class Filter InputStream
Method Class OutputStream
Inti Class OutputStream
Class Filter OutputStream
Contoh Dasar InputStream /
OutputStream
1
import java.io.*;
2
class CopyFile {
void copy(String input, String output) {
FileInputStream inputStr;
FileOutputStream outputStr;
int data;
try {
inputStr = new FileInputStream(input);
outputStr = new FileOutputStream(output);
//Selanjutnya...
3
4
5
6
7
8
9
10
Contoh Dasar InputStream /
OutputStream
12
13
14
15
16
17
18
19
20
21
while ((data = inputStr.read()) != -1) {
outputStr.write(data);
}
inputStr.close();
outputStr.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
//selanjutnya...
Contoh Dasar InputStream /
OutputStream
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
22
23
24
25
26
27
28
}
Contoh Modifikasi InputStream /
OutputStream
1
import java.io.*;
2
class CopyFile {
void copy(String input) {
PushbackInputStream inputStr;
PrintStream outputStr;
int data;
try {
inputStr = new PushbackInputStream(new
FileInputStream(input));
outputStr = new PrintStream(System.out);
//continued...
3
4
5
6
7
8
9
10
11
Contoh Modifikasi InputStream/
OutputStream
13
14
15
16
17
18
19
20
21
22
23
while ((data = inputStr.read()) != -1) {
outputStr.println("read data: " +
(char) data);
inputStr.unread(data);
data = inputStr.read();
outputStr.println("unread data: " +
(char) data);
}
inputStr.close();
outputStr.close();
//continued...
Contoh Modifikasi InputStream/
OutputStream
} catch (IOException ie) {
ie.printStackTrace();
}
24
25
26
27
}
28
public static void main(String args[]) {
String inputFile = args[0];
CopyFile cf = new CopyFile();
cf.copy(inputFile);
}
29
30
31
32
33
}
Serialization
•
Definisi :
–
–
–
–
•
Didukung oleh Java Virtual Machine (JVM)
Memiliki kemampuan untuk menulis dan membaca object ke stream
Merupakan sebuah proses untuk menyederhanakan object
Tujuan: Untuk menyimpan sebuah object kedalam sebuah penyimpanan
permanent untuk memparsing ke object yang lain melalui class
OutputStream
Menulis sebuah Object
– Keadaan tersebut haruslah dituliskan dalam sebuah serialized form
sehingga object yang telah dibangun dapat dibaca
•
Persistence
– Menyimpan sebuah object kedalam sebuah tempat penyimpanan permanent
Serialization
•
•
Streams untuk serialization
– ObjectInputStream
• Untuk deserializing
– ObjectOutputStream
• Untuk serializing
Untuk memperbolehkan sebuah object untuk di-serialize :
– Class tersebut harus meng-implement interface Serializable
– Class tersebut harus menyediakan sebuah default constructor
tanpa argument
– Kemampuan serialize diwariskan
• Tidak perlu untuk meng-implement Serializable untuk tiap class
• Bisa meng-implement Serializable sepanjang masih dalam
hierarki class
Object Non-Serializable
•
Pada saat object di-serialize
– Hanya disediakan object dari data tersebut
– Method dan constructor bukan merupakan bagian dari serialized
stream
•
Beberapa data tidak di-serialize
– Karena representasi dari data berubah secara konstan
– Contoh:
• FileInputStream objects
• Thread objects
•
Sebuah NotSerializableException akan dilempar apabila terjadi
kesalahan dalam serialization
Keyword transient
•
Sebuah class yang terdiri dari non-serializable object bisa di-serialize
– Reference kepada non-serializable object akan ditandai dengan
sebuah keyword transient
– Contoh:
1 class MyClass implements Serializable {
2
transient Thread thread;
3
//try removing transient
4
int data;
5
/* some other data */
6 }
– Keyword transient keyword mencegah data untuk di-serialize
Serialization:
Membuat Object Stream
• Gunakan class ObjectOutputStream
• Gunakan method writeObject
public final void writeObject(Object obj)
throws
IOException
dimana,
– obj adalah object yang akan ditulis kedalam Stream
Serialization:
Menulis Object Stream
1
2
3
4
5
6
7
8
9
10
11
12
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();
//continued...
Serialization:
Menulis Object Stream
} catch (IOException ie) {
ie.printStackTrace();
}
13
14
15
16
}
17
public static void main(String args[]) {
SerializeBoolean sb = new SerializeBoolean();
}
18
19
20
}
Deserialization:
Membaca Object Stream
• Gunakan class ObjectInputStream
• Gunakan method readObject
public final Object readObject()
throws IOException,
ClassNotFoundException
dimana,
– obj adalah object yang akan dibaca dari Stream
• Tipe Object yang akan dikembalikan harus di typecase ke
class name yang ditunjuk sebelum method dalam class
tersebut dapat dieksekusi.
Deserialization:
Membaca Object Stream
1
2
3
4
5
6
7
8
9
10
11
12
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();
//continued...
Deserialization:
Membaca Object Stream
13
14
15
16
17
18
19
20
21
22
23
} 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")));
}
//continued...
Deserialization:
Membaca Object Stream
public static void main(String args[]) {
UnserializeBoolean usb =
new UnserializeBoolean();
}
13
14
15
16
17
}
Kesimpulan
• Jenis Stream secara Umum
– Stream Character dan Byte
– Stream Input dan Output
– Stream Node dan Filter
• Class File
– Constructor
File(String pathname)
– Method
Kesimpulan
• Class Reader
– Method
• read, close, mark, markSupported, reset
– Class Node Reader
• FileReader, CharArrayReader, StringReader,
PipedReader
– Class Filter Reader
• BufferedReader, FilterReader, InputStreamReader,
LineNumberReader, PushbackReader
Kesimpulan
• Class Writer
– Method
• write, close, flush
– Class Node Writer
• FileWriter, CharArrayWriter, StringWriter,
PipedWriter
– Class Filter Writer
• BufferedWriter, FilterWriter, OutputStreamWriter,
PrintWriter
Kesimpulan
• Class InputStream
– Method
• read, close, mark, markSupported, reset
– Class Node InputStream
• FileInputStream, BufferedArrayInputStream,
PipedInputStream
– Class Filter InputStream
• BufferedInputStream, FilterInputStream,
ObjectInputStream, DataInputStream,
LineNumberInputStream, PushbackInputStream
Kesimpulan
• Class OutputStream
– Methods
• write, close, flush
– Class Node OutputStream
• FileOutputStream, BufferedArrayOutputStream,
PipedOutputStream
– Class Filter OutputStream
• BufferedOutputStream, FilterOutputStream,
ObjectOutputStream, DataOutputStream,
PrintStream
Kesimpulan
• Serialization
– Definisi
– Keyword transient
– Serialization: Menulis sebuah Object Stream
• Gunakan class ObjectOutputStream
• Gunakan method writeObject
– Deserialization: Membaca sebuah Object Stream
• Gunakan class ObjectInputStream
• Gunakan method readObject