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