Jumat, 09 Januari 2015

MEMBAHAS TENTANG CONSOL I/O ??


Wah.. Apasih Consol I/O itu.. ini adalah sesuatu yang baru saya dengar..
Ternyata saya belum ada apa-apanya ya.. Bahkan ilmunya masih "CETHEK".
Ya terang saja saya dari SMA yang jauh dari hiruk-pikuk ilmu komputer.... hehe tapi gak masalah,
Ayo kita beljar bareng di Blog sederhana saya ini.. ^_^

 Kita bahaS dulu Pengertian I/O Stream:

 I/O  adalah singkatan dari Input / Output dan mengacu pada transfer data ke atau dari aplikasi.
Stream sendiri merupakan  Keadaan dari sebuah file atau sebuah device yang memungkinkan rangkaian item dapat dibaca atau ditulis.

Stream didefinisikan sebagai sequence data baik dari sumber data atau tujuan data. Pada Java I/O stream terdapat dua buah stream yang digunakan yaitu : stream karakter dan stream byte.
Sesuai dengan namanya, strem byte digunakan untuk menyimpan informasi data dalam bentuk byte. Sedangkan stream karakter digunakan untuk proses I/O yang melibatkan data- data dalam bentuk karakter.
Stream karakter menggunakan karakter Unicode. Dalam Java, stream didefinisikan dengan menggunakan empat kelas abstrak yaitu:  InputStream, OutputStream, Reader, Writer.

InputSream dan OutputStream merupakan kelas abstrak yang dirancang sebagai kelas induk untuk kelas – kelas yang termasuk dalam kategori stream byte. Sedangkan Reader dan Writer merupakan kelas abstrak yang akan diturunkan menjadi kelas baru dalam kategori stream karakter.
Melalui proses pewarisan (inheritance), semua kelas yang diturunkan dari kelas InputStream dan Reader memiliki method read() untuk melakukan pembacaan data. Sedangkan kelas yang diturunkan dari kelas OutputStream dan Writer memiliki method write() yang digunakan untuk melakukan penulisan data.


  • 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


  • Overview I/O 

         1. Konsep Stream
            Stream adalah suatu abstraksi untuk data input dan output.
            Tidak peduli dari mana input berasal atau kemana output akan pergi
 


Package java.io
• Package java.io berisi kelas yang berhubungan dengan I/O di Java
• Dibagi menjadi beberapa kelas
– Reader/Writer dan turunannya
– InputStream/OutputStream dan turunannya
– I/O Network (socket TCP/IP)
– Exception
   
         2. Kelas Abstrak pada java.io
             Terdapat 4 kelas Abstrak Dasar:
             – Reader
             – Writer
             – InputStream
             – OutputStream
• Reader dan Writer digunakan untuk data Teks
• InputStream dan OutputStream digunakan untuk data biner

         3. 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

Ini dia Diagram kelas Reader dan turunannya:



Ini 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

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

           

• InputStream/OutputStream Tidak menangani konversi teks Unicode secara otomatis

  • 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


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)

    *Beberapa fungsi matematika yang penting
      • Method pow() untuk pangkat
      • Fungsi-fungsi trigonometri (sin, cos, tan)
      • Pembulatan hasil, meliputi
        – ke atas : ceil, ke bawah: floor, dan terdekat : round
      • Logaritma

    *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());
}
}
}

*Vector
• Struktur data seperti array

• Sifatnya dinamis (ukurannya tidak tetap), berubah sesuai dengan elemen yang ditambahkan ke (atau dihapus dari) Vector tersebut

• Dapat dimanipulasi dengan mudah (elemen-elemennya dapat di add, remove, atau diubah dengan mudah)

*Contoh Vector
import java.util.Vector;
import java.util.Enumeration;
class VectorDemo {
public static void main(String argv[]) {
Vector v = new Vector();
/* tambahkan elemen */
v.add("Pelangiku");
v.add("Andai Aku Besar Nanti");
v.add("Dua Balerina");
for (int i=0; i<v.size(); i++){
System.out.println(" - " + v.elementAt(i));
}
}
}


*Calendar
• Dipakai untuk menangani perhitungan kalender Masehi (Gregorian)
– Dirancang untuk mendukung kalender lain

• Menyediakan informasi mengenai tanggal, (date) dan waktu (time) saat ini (misalnya hari apa, bulan ke berapa, hari keberapa dalam tahun ini)

• Menyediakan sarana untuk penghitungan waktu

*Contoh Calendar
import java.util.Calendar;
class Kalender {
public static void main(String argv[]) {
Calendar c = Calendar.getInstance();
System.out.println("Hari ini :");
System.out.println("Hari ke“
+c.get(Calendar.DAY_OF_WEEK)+" dalam
minggu ini");
}}

CONTOH PENERAPAN
package testjeni_02;
import java.io.*;

/**
 *
 * @author NieNov
 */
public class FileInfoClass {
public static void main(String args[]) {
String fileName = "C://Price Tag.txt";
File fn = new File(fileName);
System.out.println("Name: " + fn.getName());
if (!fn.exists()) {
System.out.println(fileName + " does not exists.");
/* membuat sebuah temporary directory . */
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();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
return;
}
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:");
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
}
if (!fn.canRead()) {
System.out.println(fileName + " is not readable.");
return;
}
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.");
}
}
}

dan outputnya seperti ini:



oke.. Sekian materi yang bisa saya jelaskan di blog ini..
sampai ketemu lagi yaa sobat blog, di tugas depan..
hemmmb.. Tetap Seamangat !!! :D

Tidak ada komentar:

Posting Komentar