– Reader – Writer – InputStream – OutputStream • Reader dan Writer digunakan untuk data Teks • InputStream dan OutputStream digunakan untuk data biner
3. Kelas Reader/Writer
• Kelas Reader/Writer bekerja pada stream teks (bahasa apapun)
• Disebut juga character stream • Menangani konversi teks Unicode secara otomatis • Jangan dipertukarkan dengan InputStream/OutputStream secara sembarangan • Hasilnya bisa error
Diagram Kelas Reader dan Turunannya
Diagram Kelas Writer dan Turunannya
Kelas InputStream/OutputStream
• InputStream dan OutputStream digunakan untuk mengakses informasi non teks (biner)
– disebut juga sebagai byte stream – COntoh data biner: File EXE, file GIF • InputStream/OutputStream Tidak menangani konversi teks Unicode secara otomatis
Diagram Kelas InputStream dan turunannya
Diagram Kelas OutputStream dan turunannya
4. Input dan Output File
• Gunakan FileInputStream dan FileOutputStream untuk membaca/menulis file non teks
• Gunakan FileReader/FileWriter untuk file teks
Contoh Membuka file untuk dibaca
• cara untuk membuka file (untuk dibaca): FileInputStream s = new FileInputStream(“test.dat”); • Cara untuk membaca satu byte: int a = s.read() • Tersedia juga method untuk membaca array of byte • Prototype read adalah : int read() – Perlu dicast ke byte untuk membaca sebagai byte – Memakai int supaya cukup merepresentasikan -1
Contoh Membuka file untuk ditulis
• Cara untuk membuka file (untuk ditulisi): FileOutputStream out = new FileOutputStream(“test.out”); • Intruksi untuk menulis satu byte: – Out.write(‘a’) • Tersedia juga method untuk menulis array of byte
Perhatikan:
• Membaca dan menulis selalu perlu try … catch • Method read() dan write() melempar Exception java.lang.IOException • Kasus khusus: read() mengembalikan -1 pada end of file • EOF (End Of File atau EndOfStream) tidak menimbulkan exception
Memakai FileReader/FileWriter
• Sama seperti contoh sebelumnya – Ganti nama kelas FileInputStream dengan FileReader dan FileOutputStream dengan FileWriter – Tetap gunakan read/write • Perhatikan bahwa – Nilai kembalian
5. Wrapper
Stream dapat dikomposisi atau difilter atau dibungkus untuk menghasilkan stream yang lebih kompleks
• Konsep ini mirip dengan pipe di
Unix/Windows
• Contoh:
– BufferedReader yang menyediakan readLine()
– PipedWriter/PipedReader untuk mempipe suatu stream
– PrintStream/PrintWriter untuk menulis ke stream dengan mudah
Contoh Wrapper: BufferedReader • Perhatikan potongan kode berikut:
BufferedReader br = new
BufferedReader(new
FileReader(“hello.txt”));
//membaca 1 baris
String teks = br.readLine();
• BufferedReader membungkus (wraps) FileReader untuk menyediakan method readLine()
Contoh Wrapper: PrintWriter • Perhatikan potongan kode berikut:
PrintWriter pr = new PrintWriter(new FileWriter(“hello.txt”)); //Menulis 1 baris
pr.println(“Hello “);
• PrintWriter membungkus (wraps) FileWriter untuk menyediakan method print(), println() untuk semua tipe data dasar
Membaca dari Console [1] • Java menyediakan System.in yang class-nya adalah InputStream
• Membaca teks dari console
• Untuk membaca teks, perlu di-wrap dengan BufferedReader
• Tapi BufferedReader hanya bisa mewrap suatu class turunan Reader
• InputStream perlu di-wrap dengan InputStreamReader
Membaca dari console [2]
• Buat BufferedReader yangmembungkus InputStreamReader yang membungkus System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in))
• Untuk membaca:
String s = br.readLine();
• Untuk membaca integer, teks dibaca dengan method yang sama, lalu dikonversi dengan method Integer.parseInt()
NIO (Nonblocking I/O)
• JDK 1.4 (nama Kode: Merlin) ke atas menyediakan NIO
– Ada di package java.nio
• Improvement:
– Non blocking I/O
– Buffer
– Regular Expression
[2] String dan StringBuffer
*String
• Merupakan kelas khusus di Java (ditangani secara transparan) • Sifatnya immutable (tidak bisa diubah) • Memiliki berbagai method untuk memiliki manipulasi String
*Literal String
• Harap diingat lagi bahwa: – Setiap Literal String adalah sebuah objek String. Contoh: String teks = “Hello”; System.out.println(teks.length()); – Sama dengan System.out.println(“Hello”.length());
*Sifat Immutable String
• String sebenarnya tidak dapat diubah, namun Java memungkinkan String seolah-olah diubah, Contoh: – Jika dilakukan ini: String judul = "Judul :"; judul += "Eyes On Me"; – Maka sebenarnya yang dilakukan adalah ini String judul = "Judul :"; judul = judul.concat("Eyes On Me");
*Operasi String Tidak Optimal • String baru diciptakan (string yang lama tetap ada di memori, dan dibuang ketika terjadi garbage collection) • Untuk operasi yang banyak melibatkan perubahan string, sebaiknya menggunakan StringBuffer
*StringBuffer
• StringBuffer mirip dengan String
• Sifatnya mutable
• Tidak ditangani secara transparan oleh Java (harus dilakukan secara manual)
• Lebih cepat untuk manipulasi string yang memerlukan perubahan pada String.
Sifat mutable StringBuffer
• Untuk mengubah StringBuffer tidak perlu objek baru
– Contoh :
StringBuffer nama = new StringBuffer("mataku");
nama.setCharAt(4, 'm');
• Untuk mengubah String selalu butuh objek baru (objek lama diubah melalui assignment)
*Method yang penting
• Beberapa method String dan StringBuffer yang penting adalah:
length(): panjang string
replace(): mengganti suatu karakter
charAt(): mengakses karakter di posisi tertentu
trim(): menghilangkan spasi di awal dan di akhir string
• Perhatikan bahwa meskipun namanya sama, sifat keduanya berbeda
String menciptakan objek baru, sedangkan StringBuffer tidak
*Membandingkan String • Method equals() membandingkan string untuk memeriksa kesamaan • Method equalsIngnoreCase() melakukan hal yang sama, tapi besar kecil huruf tidak diperhatikan • Method compareTo() menghasilkan 0 jika string sama, >0 jika String1>String2 dan <0 jika String1<String2
[3] Kelas Matematik
Matematika di Java • Fungsi matematika ada di package java.math • Meliputi fungsi trigonometri, dan fungsi matematika standar – Berisi juga konstanta penting (seperti PI dan e) – Sebagian besar hasil method adalah bilangan riil (tipenya double )
Memformat Hasil • Class math tidak menyediakan cara untuk memformat keluaran (output) sehingga dapat dicetak dengan rapi • Perlu class DecimalFormat untuk melakukan format terhadap output (DecimalFormat ada pada package java.text)
Bilangan Acak • Bilangan acak sangat penting dalam simulasi, permainan, dan enkripsi • Bilangan acak dihasilkan dengan kelas Random • Kelas Random tidak berada dalam package java.math, tapi dalam kelas java.util – Contoh: Random r = new Random(); int x = r.nextInt(10); //random 0..9
BigInteger dan BigDecimal • BigInteger – Integer presisi tak hingga – Berisi semua method untuk operasi integer dan bahkan method untuk mengecek probabilitas suatu bilangan adalah prima • BigDecimal – Bilangan floating point presisi tak hingga – Semua method untuk doube/float
[4] Utility
Utility • Berbagai macam kelas yang tidak cocokdimasukkan ke package tertentu
• Beberapa yang akan dibahas
– Hashtable
– Stack
– Vector
– Calendar
• Kelas lain yang cukup berguna untukdipelajari: List, Tree
Hashtable • Digunakan untuk menyimpan data dengan assosiasi tertentu
– Misal nama panggilan diassosiasikan dengan nama lengkap
• Memetakan suatu nilai String dengan suatu Objek tertentu (Objek apa saja, termasuk juga Objek String)
• Method yang dipakai adalah put dan get
Contoh import java.util.Hashtable; class HashtableDemo { public static void main(String argv[]) { Hashtable h = new Hashtable(); h.put("Linux", "Torvalds"); h.put("Windows", "Microsoft"); String nama = (String) h.get("Linux"); if (nama!=null) { System.out.println(nama); } } }
Stack • Struktur data LIFO (Last In First Out) – Data yang masuk pertama akan keluar terakhir • Memakai Method push, untuk meletakkan satu item di Stack dan pop untuk mengeluarkan satu item dari stack – Ada juga method peek() untuk mengintip top of stack dan search untuk mencari elemen di Stack()
Contoh Stack import java.util.Stack;
class StackDemo {
public static void main(String argv[]) {
Stack s = new Stack();
s.push("Salamku Kawan");
s.push("Jangan Takut Gelap");
s.push("Gembira berkumpul");
while (!s.empty()) {
System.out.println(s.pop());
}
}
}
0 komentar:
Posting Komentar