Stream
Data
Stream Data merupakan cara praktis untuk
membaca dan menulis tipe data primitif (boolean, char, byte, short, int, long,
float dan double). Berbeda dengan stream byte dan stream char dimana tipe data
primitif harus diubah dalam bentuk byte atau char untuk dibaca maupun ditulis,
dengan menggunakan Data stream, data dapat langsung dibaca/ditulis tanpa diubah
dahulu dalam bentuk byte maupun char
Terdapat dua macam data stream yaitu:
1.
DataInputStream
2.
DataOutputStream
DataInputStream
DataInputStream
berfungsi untuk saling melengkapi dengan DataOutputStream, yaitu untuk
mendapatkan data yang ditulis dengan DataOutputStream. Sebagian method
DataInputStream adalah :
•
ReadDouble() : membaca data
bertipe double
•
readInt() : membaca data bertipe
integer
•
readBoolean() : membaca data
boolean
•
readUTF() : membaca data dengan
encoding UTF-8
DataOutputStream
DataInputStream
berfungsi untuk saling melengkapi dengan DataOutputStream, yaitu untuk
mendapatkan data yang ditulis dengan DataOutputStream. Sebagian method
DataInputStream adalah :
•
ReadDouble() : membaca data
bertipe double
•
readInt() : membaca data bertipe
integer
•
readBoolean() : membaca data
boolean
•
readUTF() : membaca data dengan
encoding UTF-8
Contoh Program DataInputStream dan
DataOutputStream :
import
java.io.*;
public class Main {
public static void
main(String[] args) throws IOException {
int i = 123;
String s = "Ini
String";
double d =
123.45;
boolean b = true;
DataOutputStream dos = new
DataOutputStream(new FileOutputStream("data.txt"));
dos.writeInt(i);
dos.writeUTF(s);
dos.writeDouble(d);
dos.writeBoolean(b);
dos.flush();
dos.close();
DataInputStream dis = new
DataInputStream(new FileInputStream("data.txt"));
int i1 = dis.readInt();
String s1 = dis.readUTF();
double d1 = dis.readDouble();
boolean b1 = dis.readBoolean();
System.out.println(i1);
System.out.println(s1);
System.out.println(d1);
System.out.println(b1);
}
}
Hasil Running Program:
123
Ini String
123.45
true
Buffered
Stream
Stream Buffer digunakan untuk membaca dan menulis data dari suatu
area memory yang disebut buffer. Berbeda dengan unbuffered I/O sebelumnya yang
pembacaan dan penulisan data ditangani langsung oleh OS sehingga menjadi kurang
effisien, dengan menggunakan Stream Buffer maka pembacaan dan penulisan file
dilakukan dalam buffer sehingga menjadi lebih effisien.
Ada empat macam
Buffered Stream yaitu
•
BufferedInputStream : untuk
membaca stream byte
•
BufferedOutputStream : untuk
menulis stream byte
•
BufferedReader : untuk membaca
stream char
•
BufferedWriter : untuk menulis
stream char
Contoh Program
BufferedInputStream dan BufferedOutputStream
import
java.io.*;
public class Main {
public static void
main(String[] args) throws IOException {
BufferedOutputStream bos = new
BufferedOutputStream(System.out);
BufferedInputStream bis = new
BufferedInputStream(System.in);
int data;
String s = "Program
Java";
for(int i=0;i<s.length();i++)
bos.write((byte) s.charAt(i));
bos.close();
while ((data = bis.read())
!= -1 )
System.out.print((char) data);
bis.close();
}
}
Hasil Running:
Program Java
Contoh Program
BufferedReader dan BufferedWriter
import
java.io.*;
public class Main {
public static void
main(String[] args) throws IOException{
String s = "Program
Java";
int data;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new
BufferedWriter(new OutputStreamWriter(System.out));
for(int i=0;i<s.length();i++)
bw.write(s.charAt(i));
bw.close();
while((data = br.read())
!= -1)
System.out.print((char) data);
br.close();
}
}
Hasil Running:
Program Java
Random Access File
Kelas
RandomAccessFile merupakan kelas yang berfungsi untuk mengakses file eksternal
secara bebas, bebas disini maksudnya kita tidak perlu membaca keseluruhan untuk
mendapatkan/mengubah informasi yang terletak pada posisi tertentu dalam sebuah
file. Dengan RandomAccessFile, kita langsung dapat mengakses data pada posisi
tertentu yang kita inginkan di dalam file. RandomAccessFile biasanya digunakan
karena kecepatan aksesnya.
Cara Kerja
RandomAccessFile
Kelas
RandomAccessFile bekerja seperti merubah sebuah file menjadi sekumpulan array
of byte, yang mana didalam kelas ini juga terdapat pointer yang berfungsi untuk
menunjukkan posisi byte yang akan diubah atau diambil nilainya.
Kita dapat
mengetahui dimana pointer berada dengan method getFilePointer, sedangkan untuk
men-set posisi pointer pada suatu posisi digunakan method seek. Untuk dapat
membaca byte dari file eksternal pada posisi dimana pointer berada, kita bisa
menggunakan method read, sedangkan untuk menulis ke file eksternal, gunakan
method write.
Contoh Program
RandomAccessFile
import
java.io.*;
public class Main {
public static void
main(String[] args) throws IOException {
// membuat
objek raf dengan kelas RandomAccessFile dengan
file "contoh.txt"
RandomAccessFile raf = new
RandomAccessFile("contoh.txt", "rw");
byte b;
byte[] content = new byte[(int)raf.length()];
// mencetak posisi awal
pointer
System.out.println("Posisi
pointer awal : "+raf.getFilePointer());
// mengubah posisi
pointer ke nilai 8
raf.seek(8);
System.out.println("\nMenjalankan
fungsi \"seek(8)\"");
System.out.println("Posisi
pointer setelah proses : "+raf.getFilePointer());
// membaca karakter yang
terdapat pada posisi pointer sekarang
b = (byte)raf.read();
System.out.println("\nMenjalankan
fungsi \"read()\"");
System.out.println("Karakter
yang terbaca : "+(char)b);
System.out.println("Posisi
pointer setelah proses : "+raf.getFilePointer());
// merubah karakter pada
file eksternal yang terdapat pada posisi
pointer sekarang
raf.write('w');
System.out.println("\nMenjalankan
fungsi \"write('x')\"");
System.out.println("Posisi
pointer setelah proses : "+raf.getFilePointer());
// membaca seluruh isi
file
raf.seek(0);
raf.read(content);
System.out.println("\nMenjalankan
fungsi \"read(content)\"");
System.out.println("String
yang terbaca : "+new String(content));
System.out.println("Posisi
pointer setelah proses : "+raf.getFilePointer());
}
}
Dalam file contoh.txt
berisi:
Bahasa Java
Hasil Running:
Posisi pointer
awal : 0
Menjalankan
fungsi "seek(8)"
Posisi pointer
setelah proses : 8
Menjalankan
fungsi "read()"
Karakter yang
terbaca : a
Posisi pointer
setelah proses : 9
Menjalankan
fungsi "write('x')"
Posisi pointer
setelah proses : 10
Menjalankan
fungsi "read(content)"
String yang
terbaca : Bahasa Jawa
Posisi pointer
setelah proses : 11
Parsing Text
Setiap teks biasanya
berisi huruf, angka maupun karakter khusus. Untuk menguraikan teks tersebut
digunakan parsing text. Parsing Text berarti menguraikan teks berdasarkan
huruf, angka, spasi, koma, baris, dll. Ada
berbagai macam cara untuk menguraikan teks
1.
Menggunakan method String.split
2.
Menggunakan kelas StringTokenizer
dan StreamTokenizer
3.
Menggunakan kelas Scanner
4.
Menggunakan kelas Pattern dan
Matcher
5.
Menggunakan tools JavaCC
Disini hanya akan dibahas
cara menguraikan teks dengan menggunakan StreamTokenizer karena susai dengan
materi yang dibahas yaitu Stream.
StreamTokenizer
Kelas StreamTokenizer
merupakan kelas yang mengambil input stream dan menguraikannya menjadi token
yang dapat dibaca satu persatu. StreamTokenizer dapat mengenali huruf, angka,
tanda kutip, dll.
Contoh program
import
java.io.*;
public class Main {
public static void
main(String[] args) throws IOException {
int i=0;
String s = "Data
berupa huruf = ";
double[] d = new double[10];
StreamTokenizer tokenizer = new StreamTokenizer(new
FileInputStream("pars.txt"));
while(tokenizer.nextToken()
!= StreamTokenizer.TT_EOF){
if(tokenizer.ttype ==
StreamTokenizer.TT_WORD) {
s = s +"
"+ tokenizer.sval;
} else if(tokenizer.ttype
== StreamTokenizer.TT_NUMBER) {
d[i] = tokenizer.nval;
i++;
} else if(tokenizer.ttype
== StreamTokenizer.TT_EOL) {
System.out.println();
}
}
System.out.println(s);
System.out.print("Data
berupa angka = ");
for(int j=0;j<i;j++)
System.out.print(d[j]+"
");
}
}
Dalam File pars.txt
tersebut berisi
Nama Budi
NIM 45
IPK 3.75
Prodi Tenik Informatika UNY 2011 Kelas F
Kemudian setalah di
parsing menghasilkan output
Data berupa huruf
= Nama Budi NIM IPK Prodi Tenik
Informatika UNY Kelas F
Data berupa
angka = 45.0 3.75 2011.0
Maaf, sepertinya pengertian DataOutputStream keliru..
ReplyDeleteWahhh... nemu jg yg dcari
ReplyDelete