View
67
Download
4
Category
Preview:
DESCRIPTION
Lec08 :: class input/output. คลาสอินพุต และ เอาท์พุต (Input/Output Classes) โดย อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com. วัตถุประสงค์. อธิบายความหมายและประเภทของ stream อธิบายองค์ประกอบที่สำคัญของแพคเก็จ java.io แนะนำคลาสและเมธอดของคลาส InputStream และ OutputStream - PowerPoint PPT Presentation
Citation preview
Lec08 :: class input/output
คลาสอิ�นพุตและเอิาท์�พุต(Input/Output Classes)
โดย อิ . น�ฐพุงศ์� ส�งเน�ยมhttp://
www.siam2dev.com
วั�ตถุประสงค� อิธิ�บายควัามหมายและประเภท์ขอิง stream อิธิ�บายอิงค�ประกอิบท์�%ส&าค�ญขอิงแพุคเก(จ java.io
แนะน&าคลาสและเมธิอิดขอิงคลาส InputStream และOutputStream
แนะน&าคลาสและเมธิอิดขอิงคลาส Reader และ Writer
อิธิ�บายควัามแตกต�างระหวั�างคลาส Reader และ Writer ก�บ stream
อิธิ�บายการสร*างและใช้* stream แบบต�างๆ
วั�ตถุประสงค� แนะน&าคลาสและเมธิอิดขอิงคลาส File
อิธิ�บายการอิ�าน เข�ยนและอิ�พุเดท์ข*อิม.ลขอิงคลาสRandomAccessFile
อิธิ�บายการใช้*อิ�นเตอิร�เฟสท์�%ช้0%อิ Serializable
อิธิ�บายวั�ธิ�การเข�ยนและอิ�านข*อิม.ลขอิงอิอิปเจ(คผ่�านstream
Stream
เปร�ยบเสม0อินท์�อิส�งข*อิม.ลจากต*นท์าง (source) ไปย�งปลายท์าง (sink)
stream ช้�วัยท์&าให*ผ่.*เข�ยนโปรแกรม ไม�จ&าเป3นต*อิงท์ราบรายละเอิ�ยดการต�ดต�อิก�บฮาร�ดแวัร�หร0อิซอิฟต�แวัร�
ท์�%ใช้*ในการส�งข*อิม.ล เพุ�ยงแต�ต*อิงร.*เมธิอิดท์�%ใช้*ในการร�บหร0อิส�งข*อิม.ล
source เป3นต&าแหน�งเร�%มต*นขอิง stream เร�ยกวั�าinput stream
sink เป3นต&าแหน�งส�6นสดขอิง stream เร�ยกวั�าoutput stream
Stream
source หร0อิ sink อิาจเป3นฮาร�ดแวัร�หร0อิซอิฟต�แวัร� เช้�น ไฟล� หน�วัยควัามจ&า หร0อิ socket เป3นต*น
ภาษาจาวัาแบ�ง stream อิอิกเป3น•byte stream• character stream
ค&าวั�า stream โดยท์�%วัไปจะหมายถุ8ง byte stream reader และ writer จะหมายถุ8ง character
stream
แพุคเก(จ java.io
คลาสท์�%เก�%ยวัก�บอิ�นพุตและเอิาท์�พุต จะถุ.กก&าหนดโดย Java API ในแพุคเก(จ java.io ซ8%งจะม�คลาสพุ06นฐานอิย.� 4 คลาสค0อิ • InputStream
เป3นคลาสท์�%ใช้*ในการสร*างอิอิปเจ(คท์�%เป3น stream ในการร�บช้น�ด ข*อิม.ลแบบ byte
• OutputStream เป3นคลาสท์�%ใช้*ในการสร*างอิอิปเจ(คท์�%เป3น stream ในการส�งช้น�ด
ข*อิม.ลแบบ byte
• Reader เป3นคลาสท์�%ใช้*ในการสร*างอิอิปเจ(คท์�%เป3น stream ในการร�บช้น�ด
ข*อิม.ลแบบ char
• Writer เป3นคลาสท์�%ใช้*ในการสร*างอิอิปเจ(คท์�%เป3น stream ในการส�งช้น�ด
ข*อิม.ลแบบ char
คลาสประเภท์ Byte Stream
ภาษาจาวัาจะม�คลาสพุ06นฐานในการจ�ดการก�บอิ�นพุตและ เอิาท์�พุตท์�%เป3นช้น�ดข*อิม.ลแบบ byte อิย.�สอิงคลาสท์�%ค.�ก�น
ค0อิ InputStream และ OutputStream คลาสท์�6งสอิงเป3นคลาสแบบ abstract ซ8%งเราไม�สามารถุ
ท์�%จะสร*างอิอิปเจ(คขอิงคลาสท์�6งสอิงได* แต�คลาสท์�6งสอิง จะม�คลาสท์�%เป3น subclass ซ8%งจะใช้*ในการสร*างอิอิป
เจ(คส&าหร�บการร�บและส�งข*อิม.ลแบบ byte ขอิงโหนดท์�%ม�ต*นท์างและปลายท์างแบบต�างๆอิาท์�เช้�น• FileInputStream และ FileOutputStream เป3นคลาสท์�%ใช้*ในการ
สร*าง อิอิปเจ(คส&าหร�บต*นท์างและปลายท์างท์�%เป3นไฟล�• ByteArrayInputStream และ ByteArrayOutputStream เป3น
คลาสท์�%ใช้*ในการสร*างอิอิปเจ(คส&าหร�บต*นท์างและปลายท์าง ท์�% เป3นอิะเรย�ขอิงช้น�ดข*อิม.ลแบบ byte
คลาส InputStream คลาส InputStream จะใช้*ในการอิ�านข*อิม.ลขอิง stream
ท์�%เป3นช้น�ดข*อิม.ลแบบ byte คลาส InputStream จะน&าข*อิม.ลจากโหนดต*นท์างเข*ามาใน
stream และการอิ�านข*อิม.ลจาก stream จะเป3นการ ลบข*อิม.ลท์�%อิ�านอิอิกจาก stream โดยม�เมธิอิดท์�%ใช้*
ส&าหร�บการอิ�านข*อิม.ลท์�%เป3น byte หร0อิอิะเรย�ขอิง byte เท์�าน�6นด�งน�6 • int read()• int read(byte []b)• int read(byte []b,int offset,int length)
คลาส InputStream
เมธิอิดอิ0%นๆท์�%ส&าค�ญ• void close()• int available()• void skip(long n)• boolean markSupported()• void mark(int readlimit)• void reset()
คลาส OutputStream คลาส OutputStream จะใช้*การส�งข*อิม.ลขอิง stream
ท์�%เป3นช้น�ดข*อิม.ลแบบ byte การส�งข*อิม.ลขอิงอิอิบเจ(คช้ น�ด Outputstream จะเป3นการเพุ�%มข*อิม.ลลงใน stream
คลาส OutputStream จะม�เมธิอิดในการส�งข*อิม.ลช้น�ดbyte ท์�%สอิดคล*อิงก�บเมธิอิด read() ในคลาส InputStream
โดยคลาสน�6จะม�เมธิอิด write() ท์�%เป3นเมธิอิดแบบabstract ในร.ปแบบต�างๆด�งน�6 • void write(int c)• void write(byte []b)• void write(byte []b,int offset,int length)
คลาสประเภท์ Character Stream
ภาษาจาวัาก&าหนดคลาสพุ06นฐานในการจ�ดการก�บอิ�นพุต และเอิาท์�พุตท์�%เป3นช้น�ดข*อิม.ลแบบ char อิย.�สอิงคลาสค0อิ
Reader และ Writer คลาสท์�6งสอิงเป3นคลาสแบบ abstract โดยม�
subclass ท์�%ส0บท์อิดมาเพุ0%อิใช้*ในการสร*างอิอิปเจ(คส&าหร�บจ�ดการก�บโหนดต*นท์างและปลายท์างในร.ปแบบ
ต�างๆเช้�น ไฟล� หน�วัยควัามจ&า และไบท์� เป3นต*น
คลาส Reader Reader เป3นคลาสท์�%ใช้*ในการอิ�านข*อิม.ลขอิง stream ท์�%
เป3นช้น�ดข*อิม.ลแบบ char Reader จะม�เมธิอิดท์�%เหม0อินก�บคลาส InputStream และม�
หล�กการท์&างานท์�%สอิดคล*อิงก�นแต�จะร�บข*อิม.ลหร0อิargument ท์�%เป3นช้น�ดข*อิม.ล char โดยม�เมธิอิดต�างๆด�งน�6• int read()• int read(char []c)• int read(char []c,int offset,int length)• void close()• boolean ready()• void skip(long n)• boolean markSupported()• void mark(int readAheadlimit)• void reset()
คลาส Writer Writer เป3นคลาสท์�%ใช้*ในการเข�ยนข*อิม.ลขอิง stream
ท์�%เป3นช้น�ดข*อิม.ลแบบ char Writer จะม�เมธิอิดท์�%เหม0อินก�บคลาส OutputStream และม�
หล�กการท์�สอิดคล*อิงก�นแต�จะร�บข*อิม.ลหร0อิargument ท์�%เป3นช้น�ดข*อิม.ล char โดยม�เมธิอิดต�างๆด�งน�6 • void write(int c)• void write(char []c)• void write(char []c,int offset,int length)• void close()• void flush()
เมธิอิดเพุ�%มเต�มเพุ0%อิเข�ยนช้น�ดข*อิม.ลท์�%เป3น String• void write(String s)• void write(String s,int offset,int length)
โหนดส&าหร�บ Stream
ภาษาจาวัาก&าหนดโหนดท์�%เป3นต*นท์างและปลายท์างขอิงstream ไวั*สามแบบค0อิ ไฟล� หน�วัยควัามจ&า และไปป9(pipe)
ไฟล�ค0อิโหนดส&าหร�บ stream ท์�%เป3นไฟล�ส&าหร�บอิ�าน หร0อิเข�ยนข*อิม.ลช้น�ด byte
หน�วัยควัามจ&าค0อิโหนดส&าหร�บ stream ท์�%ใช้*ส&าหร�บ อิ�านหร0อิเข�ยนข*อิม.ลท์�%เป3นอิะเรย�หร0อิ String
ไปป9ค0อิโหนดส&าหร�บ stream ท์�%จะส�งหร0อิร�บข*อิม.ล ระหวั�าง process หร0อิโปรแกรมเธิรด
คลาสท์�%เป3น โหนดส&าหร�บ stream ต�างๆ
ช้น�ด Byte Stream Character Stream
FileFileInputStream
FileOutputStream
FileReader
FileWriter
Memory: ArrayByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
Memory: String -StringReader
StringWriter
PipePipedInputStream
PipedOutputStream
PipedReader
PipedWriter
ต�วัอิย�างโปรแกรม FileCopy.javaimport java.io.*;
public class FileCopy { public static void main(String args[]) { try {
FileInputStream fin = new FileInputStream(args[0]);
FileOutputStream fout = new FileOutputStream(args[1]);
byte b[] = new byte[100];int i = fin.read(b);while (i != -1) {
fout.write(b,0,i); i = fin.read(b);
}fin.close();fout.close();
} catch (IOException e) { } }}
import java.io.*;
public class FileCopy { public static void main(String args[]) { try {
FileInputStream fin = new FileInputStream(args[0]);
FileOutputStream fout = new FileOutputStream(args[1]);
byte b[] = new byte[100];int i = fin.read(b);while (i != -1) {
fout.write(b,0,i); i = fin.read(b);
}fin.close();fout.close();
} catch (IOException e) { } }}
ต�วัอิย�างโปรแกรม FileCopyReader.javaimport java.io.*;
public class FileCopyReader { public static void main(String args[]) {
try { FileReader fr = new FileReader(args[0]); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter(args[1]); BufferedWriter bw = new BufferedWriter(fw); String line = br.readLine(); while (line != null) {
bw.write(line,0,line.length());bw.newLine();line = br.readLine();
} br.close(); bw.close();} catch (IOException e) { }
}}
import java.io.*;
public class FileCopyReader { public static void main(String args[]) {
try { FileReader fr = new FileReader(args[0]); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter(args[1]); BufferedWriter bw = new BufferedWriter(fw); String line = br.readLine(); while (line != null) {
bw.write(line,0,line.length());bw.newLine();line = br.readLine();
} br.close(); bw.close();} catch (IOException e) { }
}}
อิธิ�บายต�วัอิย�างโปรแกรม โปรแกรม FileCopy.java แสดงต�วัอิย�างขอิงการก(อิบป:6
ข*อิม.ลขอิงไฟล�หน8%งไฟล�ไปย�งไฟล�อิ0%น โดยใช้* byte stream
โปรแกรม FileCopyReader.java แสดงต�วัอิย�างขอิง ก(อิปป:6 ข*อิม.ลขอิงไฟล�เช้�นเด�ยวัก�บโปรแกรม
FileCopy.java แต�จะใช้* character stream
การเช้0%อิมต�อิอิอิปเจ(คขอิงคลาส โดยท์�%วัไปโปรแกรมภาษาจาวัาจะใช้*อิอิปเจ(คประเภท์
stream มากกวั�าหน8%งอิอิปเจ(คโดยจะเช้0%อิมอิอิปเจ(ค ขอิง stream ต�างๆเข*าด*วัยก�นเพุ0%อิใช้*ในการแปลง
ช้น�ดข*อิม.ลประเภท์ต�างๆ
ต�วัอิย�างแสดงการเช้0%อิมต�อิอิอิปเจ(คขอิงคลาส FileInputStream ท์�%อิ�านข*อิม.ลเข*ามาโดยม�ช้น�ดข*อิม.ล เป3นbyte เข*าก�บอิอิปเจ(คขอิงคลาส DataInputStream เพุ0%อิใช้*อิ�านข*อิม.ลช้น�ดอิ0%นๆได*มากข86น เช้�น
FileInputStream fin = new FileInputStream(“test.dat”);DataInputStream din = new DataInputStream(fin);
คลาสประเภท์ stream ระด�บส.ง อิอิปเจ(คท์�%ใช้*ในการเช้0%อิมต�อิ stream จะเป3นอิอิปเจ(ค
ขอิงคลาสประเภท์ steam ระด�บส.ง (high-level stream) ซ8%งสามารถุท์�%จะอิ�านหร0อิเข�ยนข*อิม.ลท์�%เป3น
ช้น�ดข*อิม.ลอิ0%นๆแล*วัแปลงข*อิม.ลให*เป3นช้น�ดข*อิม.ลแบบbyte หร0อิม�บ�ฟเฟอิร�ในการเพุ�%มประส�ท์ธิ�ภาพุในการอิ�าน
หร0อิเข�ยนข*อิม.ล คลาสเหล�าน�6จะไม�สามารถุอิ�านหร0อิเข�ยนข*อิม.ลไปย�ง
โหนดต*นท์างหร0อิปลายท์างท์�%เป3นไฟล� หน�วัยควัามจ&า หร0อิ Pipe ได*โดยตรง แต�จะร�บข*อิม.ลมาจาก stream
อิ0%นๆท์�%เป3นคลาสพุ06นฐานในการอิ�านหร0อิเข�ยนข*อิม.ล
คลาสประเภท์ stream ระด�บส.งท์�%ส&าค�ญ
DataInputStream และ DataOutputStream • เป3นคลาสท์�%ใช้*ในการแปลงช้น�ดข*อิม.ลระหวั�างช้น�ดข*อิม.ลแบบbyte ก�บช้น�ดข*อิม.ลแบบอิ0%นๆ
BufferedInputStream และ BufferedOutputStream • เป3นคลาสท์�%ม�บ�ฟเฟอิร�ส&าหร�บช้น�ดข*อิม.ล byte อิย.�ภายในเพุ0%อิให*
สามารถุอิ�านหร0อิเข�ยนข*อิม.ลขนาดใหญ� ซ8%งจะช้�วัยเพุ�%มประส�ท์ธิ�ภาพุในการอิ�านหร0อิเข�ยนข*อิม.ล
PrintStream• เป3นคลาสท์�%ใช้*ในการเข�ยนข*อิควัามท์�%เป3น String ท์�%แปลงมาจาก
ช้น�ดข*อิม.ลแบบ byte อิอิปเจ(คท์�%ช้0%อิ out และ err ท์�%อิย.�ในคลาสท์�% ช้0%อิ System เป3นต�วัอิย�างขอิงอิอิปเจ(คท์�%ใช้*คลาสน�6
PushbackInputStream• คลาสน�6อินญาตให*ส�งข*อิม.ลช้น�ด byte ท์�%เพุ�%งอิ�านมากล�บไปย�งstream ได*
คลาสประเภท์ stream ระด�บส.งท์�%ส&าค�ญ
ButteredReader และ BufferedWriter• เป3นคลาสท์�%ม�บ�ฟเฟอิร�ส&าหร�บช้น�ดข*อิม.ลแบบ char เพุ0%อิให*
สามารถุอิ�านหร0อิเข�ยนข*อิม.ลข*อิใหญ�ได* InputStreamReader และ OutputStreamWriter
• เป3นคลาสท์�%ใช้*ในการแปลงช้น�ดข*อิม.ลระหวั�างช้น�ดข*อิม.ลแบบchar ก�บช้น�ดข*อิม.ลแบบอิ0%นๆ
PrintWriter• เป3นคลาสท์�%ใช้*ในการเข�ยนข*อิควัามท์�%เป3น String ท์�%แปลงมา
จากช้น�ดข*อิม.ลแบบ char
PushbackReader• เป3นคลาสท์�%อินญาตให*ส�งข*อิม.ลช้น�ด char ท์�%เพุ�%งอิ�านมากล�บไป
ย�ง stream ได*
คลาสประเภท์ stream ระด�บส.ง
ช้น�ด Byte Stream Character Stream
BufferingBufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
FilteringFilterInputStream
FilterOutputStream
FilterReader
FilterWriter
Data
conversion
DataInputStream
DataOutputStream-
Printing PrintStream PrintWriter
Peeking ahead PushbackInputStream PushbackReader
การเช้0%อิมต�อิ Stream หลายช้�6น เราสามารถุเช้0%อิมต�อิ Stream ได*หลายช้�6น เช้�น
FileInputStream f = new FileInputStream(“text.dat”);BufferedInputStream b = new BufferedInputStream(f);DataInputStream d = new DataInputStream(b);
คลาส DataInputStream
คลาส DataInputStream ม�เมธิอิดในการอิ�านข*อิม.ลช้น�ดต�างๆด�งน�6• boolean readBoolean()• byte readByte()• char readChar()• double readDouble()• float readFloat()• int readInt()• long readLong()• short readShort()• String readUTF()
คลาส DataOutputStream
DateOutputStream เป3น high-level FilterStream ซ8%งม�เมธิอิดในการเข�ยนข*อิม.ลช้น�ดต�างๆด�งน�6• void writeBoolean(boolean b)• void writeByte(int b)• void writeByte(String s)• void writeChar(int c)• void writeDouble(double d)• void writeFloat(float f)• void writeInt(int i)• void writeLong(long l)• void writeShort(int s)• void writeUTF(String s)
ต�วัอิย�าง ขอิงการใช้*คลาสDataOutputStream
import java.io.*;
public class DataWriterDemo {public static void main (String args[]) {
try {FileOutputStream fout;DataOutputStream dout;fout = new FileOutputStream("data.dat");dout = new DataOutputStream(fout);dout.writeInt(124);dout.writeDouble(2.45);dout.writeChar('a');dout.writeUTF("test");dout.close();fout.close();
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
import java.io.*;
public class DataWriterDemo {public static void main (String args[]) {
try {FileOutputStream fout;DataOutputStream dout;fout = new FileOutputStream("data.dat");dout = new DataOutputStream(fout);dout.writeInt(124);dout.writeDouble(2.45);dout.writeChar('a');dout.writeUTF("test");dout.close();fout.close();
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
ต�วัอิย�างโปรแกรม DataInputStreamimport java.io.*;
public class DataReaderDemo {public static void main (String args[]) {
try {FileInputStream fin;DataInputStream din;fin = new FileInputStream("data.dat");din = new DataInputStream(fin);int x = din.readInt();double d = din.readDouble();char ch = din.readChar();String line = din.readUTF();
System.out.println("x= " + x + " d= "+ d + " ch= " + ch);
System.out.println(line);
import java.io.*;
public class DataReaderDemo {public static void main (String args[]) {
try {FileInputStream fin;DataInputStream din;fin = new FileInputStream("data.dat");din = new DataInputStream(fin);int x = din.readInt();double d = din.readDouble();char ch = din.readChar();String line = din.readUTF();
System.out.println("x= " + x + " d= "+ d + " ch= " + ch);
System.out.println(line);
ต�วัอิย�างโปรแกรม DataInputStream
din.close();fin.close();
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
din.close();fin.close();
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
ผ่ลล�พุธิ�ท์�%ได*จากการร�นโปรแกรมx= 124 d= 2.45 ch= atest
การแปลงข*อิม.ลระหวั�าง byte และ char
เราสามารถุท์�%จะแปลง stream ระหวั�างช้น�ดข*อิม.ลแบบbyte และช้น�ดข*อิม.ลแบบ char ได*โดยใช้*• คลาส InputStreamReader ซ8%งจะอิ�านช้น�ดข*อิม.ลแบบ byte แล*วั
แปลงเป3นช้น�ดข*อิม.ลแบบ char • คลาส OutputStreamWriter ซ8%งจะอิ�านช้น�ดข*อิม.ลแบบ char
แล*วัแปลงเป3นช้น�ดข*อิม.ลแบบ byte
ต�วัอิย�างโปรแกรมimport java.io.*;
public class FileWriter {public static void main(String args[]) {
FileOutputStream fout;OutputStreamWriter oout;PrintWriter p;String line1 = "This is a test message";String line2 = "This is another line";try {
fout = new FileOutputStream("data.dat");
oout = new OutputStreamWriter(fout);p = new PrintWriter(oout);p.println(line1);p.println(line2);
import java.io.*;
public class FileWriter {public static void main(String args[]) {
FileOutputStream fout;OutputStreamWriter oout;PrintWriter p;String line1 = "This is a test message";String line2 = "This is another line";try {
fout = new FileOutputStream("data.dat");
oout = new OutputStreamWriter(fout);p = new PrintWriter(oout);p.println(line1);p.println(line2);
ต�วัอิย�างโปรแกรมp.close();oout.close();fout.close();
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
p.close();oout.close();fout.close();
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
คลาส File
คลาสท์�%ช้0%อิ File เป3นคลาสท์�%อิย.�ในแพุคเก(จ java.io เป3น คลาสท์�%ใช้*ในการสร*างอิอิปเจ(คท์�%เป3นไฟล�หร0อิไดเร(กท์อิร�%
คลาส File จะม�เมธิอิดในการจ�ดการก�บไฟล�หร0อิ ไดเร(กท์อิร�% และเมธิอิดในการส0บค*นข*อิม.ลต�างๆอิย.�หลาย
เมธิอิด อิอิปเจ(คขอิงคลาส File จะสร*างมาจาก
constructor ท์�%ม�ร.ปแบบด�งน�6• public File(String name)• public File(String dir, String name)• public File(File dir, String name)
เมธิอิดขอิงคลาส File
เมธิอิดขอิงคลาส File ท์�%ใช้*ในการส0บค*นข*อิม.ลหร0อิจ�ดการก�บไฟล�ท์�%ส&าค�ญม�ด�งน�6 • boolean exists()• boolean isFile()• boolean isDirectory()• String getName()• String getParent()• String []list()• boolean canWrite()• boolean mkdir()• boolean renameTo(File newName)
การ สร*างอิอิปเจ(คขอิงคลาส File
เราสามารถุสร*างอิอิปเจ(คช้น�ดคลาส File เพุ0%อิตรวัจสอิบวั�าม�ไฟล�ด�งกล�าวัหร0อิไม�
Constructor ขอิงFileInputStream/FileOutputStream หร0อิFileReader/FileWriter ม� argument ท์�%เป3นอิอิปเจ(คช้น�ดคลาส File
ต�วัอิย�างFile f = new File(“test.dat”);
if (f.exists()) {
FileInputStream fir = new FileInputStream(f);
}
คลาส RandomAccessFile
ภาษาจาวัาม�คลาสท์�%สน�บสนนการอิ�านหร0อิเข�ยนไฟล�เป3น แบบ random access กล�าวัค0อิไม�จ&าเป3นจะต*อิงอิ�าน
หร0อิเข�ยนข*อิม.ลขอิงไฟล�เร�ยงตามล&าด�บจากต&าแหน�ง แรกสดไปย�งต&าแหน�งสดท์*ายขอิงไฟล� คลาสประเภท์น�6
ค0อิคลาส RandomAccessFile ซ8%งจะใช้*เวัลาในการอิ�านหร0อิ เข�ยนข*อิม.ลในต&าแหน�งต�างๆเท์�าก�น
คลาส RandomAccessFile จะม� constructor อิย.�สอิงร.ปแบบด�งน�6 • public RandomAccessFile(String name,String mode)• public RandomAccessFile(File file,String mode)mode อิาจก&าหนดเป3น
• “r” เป(นการเป;ดไฟล�เพุ0%อิอิ�านข*อิม.ล• “rw” เป(นการเป;ดไฟล�เพุ0%อิอิ�านและเข�ยนข*อิม.ล
เมธิอิดขอิงคลาส RandomAccessFile
คลาส RandomAccessFile จะม�เมธิอิดส&าหร�บการอิ�านและเข�ยนข*อิม.ล
ท์�%เป3นช้น�ดข*อิม.ลแบบพุ06นฐานช้น�ดต�างๆคล*ายก�บคลาสDataInputStream และ DataOutputStream
คลาส RandomAccessFile ม�เมธิอิดอิ0%นๆท์�%ส&าค�ญเพุ�%มเต�มมาด�งน�6• long getFilePointer()• long length()• void seek(long pos)
ObjectStream
ภาษาจาวัาม�คลาสท์�%ใช้*ในการร�บและส�งข*อิม.ลขอิงอิอิปเจ(คท์�%ช้0%อิ• ObjectInputStream• ObjectOutputStream
ท์�6งน�6อิอิปเจ(คท์�%จะสามารถุส�งผ่�าน stream เหล�าน�6ได*จะ ต*อิงเป3นอิอิปเจ(คขอิงคลาสท์�% implements อิ�นเตอิร�เฟส
Serializable ซ8%งเป3นอิ�นเตอิร�เฟสในแพุคเก(จ java.io
อิอิปเจ(คบางประเภท์จะไม�สามารถุท์�%จะ implements อิ�นเตอิร�เฟส Serializable ได* เน0%อิงจากข*อิม.ลขอิงอิอิป
เจ(คอิาจเปล�%ยนแปลงได*ตลอิดเวัลา อิาท์�เช้�น อิอิปเจ(ค ขอิงคลาส Thread หร0อิ FileInputStream
ObjectStream เราสามารถุจะระบคณล�กษณะขอิงอิอิปเจ(คหร0อิคณล�กษณะขอิง
คลาสท์�%ไม�ต*อิงการจะเก(บหร0อิเร�ยกด.ข*อิม.ลผ่�าน stream ได*โดย การระบให*คณล�กษณะด�งกล�าวัม� modifier เป3นค�ย�เวั�ร�ดท์�%ช้0%อิ
transient ต�วัอิย�างเช้�นpublic class Student implements Serializable { private String id,name;
private double gpa;private transient String parent; }
คลาส ObjectOutputStream เป3นคลาสท์�%ใช้*ในการเข�ยนอิอิปเจ(ค ใดๆลงใน stream โดยม�เมธิอิด writeObject()ท์�%ใช้*ในการเข�ยน
ข*อิม.ล ส�วันคลาส ObjectInputStream เป3นคลาสท์�%ใช้*ในการร�บอิอิปเจ(ค
ใดๆมาจาก stream โดยม�เมธิอิด readObject() ท์�%ใช้*ในการอิ�านข*อิม.ล
ต�วัอิย�างโปรแกรมimport java.io.*;
public class ObjectPersistenceDemo {public static void main(String args[]) {
Student s = new Student("Somchai", "4514452-2", 3.21);
FileOutputStream fout;ObjectOutputStream oout;FileInputStream fin;ObjectInputStream oin;try {
fout = new FileOutputStream("data.dat");oout = new ObjectOutputStream(fout);oout.writeObject(s);System.out.println("Write to file
successfully");oout.close();fout.close();
import java.io.*;
public class ObjectPersistenceDemo {public static void main(String args[]) {
Student s = new Student("Somchai", "4514452-2", 3.21);
FileOutputStream fout;ObjectOutputStream oout;FileInputStream fin;ObjectInputStream oin;try {
fout = new FileOutputStream("data.dat");oout = new ObjectOutputStream(fout);oout.writeObject(s);System.out.println("Write to file
successfully");oout.close();fout.close();
ต�วัอิย�างโปรแกรมfin = new FileInputStream("data.dat");oin = new ObjectInputStream(fin);Student s2 = (Student) oin.readObject();oin.close();fin.close();s2.showAllDetails();
} catch (ClassNotFoundException ex) {System.out.println(ex.toString());
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
fin = new FileInputStream("data.dat");oin = new ObjectInputStream(fin);Student s2 = (Student) oin.readObject();oin.close();fin.close();s2.showAllDetails();
} catch (ClassNotFoundException ex) {System.out.println(ex.toString());
} catch (IOException ex) {System.out.println(ex.toString());
}}
}
ผ่ลล�พุธิ�ท์�%ได*จากการร�นโปรแกรมWrite to file successfullyID: 4514452-2Name: SomchaiGPA: 3.21
สรปเน06อิหาขอิงบท์ stream เปร�ยบเสม0อินท์�อิส�งข*อิม.ล สามารถุแบ�งอิอิก
ได*เป3น 2 ประเภท์ค0อิ byte stream และcharacter stream
byte stream ม�คลาสพุ06นฐานค0อิ คลาส InputStream และ OutputStream
character stream ม�คลาสพุ06นฐานค0อิ คลาสReader และ Writer
คลาส InputStream จะใช้*ในการอิ�านข*อิม.ลขอิง stream และ OutputStream จะน&าข*อิม.ลจากโหนดต*นท์างเข*ามาใน
stream ส&าหร�บข*อิม.ลท์�%ม�ช้น�ดข*อิม.ลเป3นแบบ byte
สรปเน06อิหาขอิงบท์ คลาส Reader เป3นคลาสท์�%ใช้*ในการอิ�านข*อิม.ลขอิง
stream และคลาสWriter เป3นคลาสท์�%ใช้*ในการเข�ยน ข*อิม.ลขอิง stream ส&าหร�บข*อิม.ลท์�%ม�ช้น�ดข*อิม.ลเป3น
แบบ char
คลาสประเภท์ stream ระด�บส.งท์�%ส&าค�ญค0อิ คลาสDataInputStream, DataOutputStream, BufferedInputStream, BufferedOutputStream, PrintStream, PushbackInputStream, BufferedReader, BufferedWriter, InputStreamReader,
OutputStreamWriter, PrintWriter และ PushbackReader
การเช้0%อิมต�อิ stream หลายช้�6น จะท์&าให*สามารถุเร�ยกใช้*เมธิอิดได*หลายร.ปแบบตามควัามต*อิงการในการใช้*งาน
สรปเน06อิหาขอิงบท์ คลาส File ใช้*ในการสร*างอิอิปเจ(คขอิงไฟล�หร0อิ
ไดเร(กท์อิร�% โดยจะม�เมธิอิดท์�%ใช้*ในการจ�ดการก�บไฟล� คลาส RandomAccessFile จะม�ร.ปแบบในการอิ�านและ
เข�ยนข*อิม.ลเป3นแบบ random access อิอิปเจ(คท์�%จะสามารถุร�บหร0อิส�งผ่�าน stream ได*จะต*อิง
เป3นอิอิปเจ(คขอิงคลาสท์�% implements อิ�นเตอิร�เฟสSerializable
Recommended