SlideShare a Scribd company logo
บทท 10
         คลาสอนพตและเอาทพต
         (Input/Output Classes)

           ผศ.ธนศา เครอไวศยวรรณ
           คณะเทคโนโลย(สารสนเทศ
สถาบ,นเทคโนโลย(พระจอมเกล1าเจ1าค2ณทหารลาดกระบ,ง
ว,ตถ2ประสงค8
 อธบายความหมายและประเภทของ stream
 อธบายองค8ประกอบท(ส>าค,ญของแพคเก@จ java.io
                   =
 แนะน>าคลาสและเมธอดของคลาส InputStream และ OutputStream
 แนะน>าคลาสและเมธอดของคลาส Reader และ Writer

 อธบายความแตกตAางระหวAางคลาส Reader และ Writer ก,บ stream

 อธบายการสร1างและใช1 stream แบบตAางๆ
ว,ตถ2ประสงค8
 แนะน>าคลาสและเมธอดของคลาส File
 อธบายการอAาน เข(ยนและอ,พเดทข1อมEลของคลาส RandomAccessFile
 อธบายการใช1อนเตอร8เฟสท(=ช=อ Serializable

 อธบายวธ(การเข(ยนและอAานข1อมEลของออปเจ@คผAาน stream
Stream
 เปรยบเสมอนทอสงขอมลจากตนทาง (source) ไปยงปลายทาง (sink)

 streamชวยท"าใหผเขยนโปรแกรม ไมจ"าเป(นตองทราบรายละเอยดการ
  ตดตอกบฮารดแวรหรอซอฟตแวรทใชในการสงขอมล เพยงแตตองรเมธอดท
  ใชในการรบหรอสงขอมล
 source เป(นต"าแหนงเรมตนของ    stream เรยกวา input stream
 sink เป(นต"าแหนงส/นสดของ   stream เรยกวา output stream
Stream
 source หรอ sink อาจเป(นฮารดแวรหรอซอฟตแวร เชน ไฟล หนวยความจ"า
  หรอ socket เป(นตน
 ภาษาจาวาแบง stream ออกเป(น
   •   byte stream
   •   character stream
 ค"าวา stream โดยทวไปจะหมายถ3ง    byte stream
 reader และ writer จะหมายถ3ง   character stream
แพคเก4จ java.io
 คลาสทเกยวกบอนพตและเอาทพตจะถEกก>าหนดโดย Java API ในแพคเก4จ
  java.io       ซV=งจะม(คลาสพWนฐานอยEA 4 คลาสคอ
   •   InputStream
       เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการร,บชนดข1อมEลแบบ byte
                                        =
   •   OutputStream
       เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการสAงชนดข1อมEลแบบ byte
                                        =
   •   Reader
       เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการร,บชนดข1อมEลแบบ char
                                        =
   •   Writer
       เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการสAงชนดข1อมEลแบบ char
                                        =
คลาสประเภท InputStream
คลาสประเภท OutputStream
คลาสประเภท Reader
คลาสประเภท Writer
คลาสประเภท Byte Stream
 ภาษาจาวาจะม(คลาสพนฐานในการจ,ดการก,บอนพ2ตและเอาท8พ2ตท(=เปZนชนด
                   W
  ข1อมEลแบบ byte อยEสองคลาสท(=คEAก,นคอ InputStream และ
                    A
  OutputStream
 คลาสท,WงสองเปZนคลาสแบบ abstract      ซV=งเราไมAสามารถท(=จะสร1างออปเจ@ค
  ของคลาสท,งสองได1 แตAคลาสท,Wงสองจะม(คลาสท(=เปZน subclass ซV=งจะใช1ใน
            W
  การสร1างออปเจ@คส>าหร,บการร,บและสAงข1อมEลแบบ byte ของโหนดท(=ม(
  ต1นทางและปลายทางแบบตAางๆอาทเชAน
   •   FileInputStream และ FileOutputStream เปZนคลาสท(=ใช1ในการสร1าง
       ออปเจ@คส>าหร,บต1นทางและปลายทางท(=เปZนไฟล8
   •   ByteArrayInputStream และ ByteArrayOutputStream เปZนคลาสท(=ใช1
       ในการสร1างออปเจ@คส>าหร,บต1นทางและปลายทาง ท(=เปZนอะเรย8ของชนดข1อมEลแบบ
       byte
คลาส InputStream
 คลาส InputStream    จะใช1ในการอAานข1อมEลของ stream ท(=เปZนชนดข1อมEล
  แบบ byte
 คลาส InputStream จะน>าข1อมEลจากโหนดต1นทางเข1ามาใน stream และ
  การอAานข1อมEลจาก stream จะเปZนการลบข1อมEลท(อAานออกจาก stream โดย
                                                =
  ม(เมธอดท(ใช1ส>าหร,บการอAานข1อมEลท(=เปZน byte หรออะเรย8ของ byte
            =
  เทAาน,นด,งน(W
        W
   •   int read()
   •   int read(byte []b)
   •   int read(byte []b,int offset,int length)
คลาส InputStream




 เมธอดอนๆท(ส>าค,ญ
            =
   •   void close()
   •   int available()
   •   void skip(long n)
   •   boolean markSupported()
   •   void mark(int readlimit)
   •   void reset()
คลาส OutputStream
 คลาส OutputStream    จะใช1การสAงข1อมEลของ stream ท(=เปZนชนดข1อมEล
  แบบ byte การสAงข1อมEลของออบเจ@คชนด Outputstream จะเปZนการเพ=ม
  ข1อมEลลงใน stream
 คลาส OutputStream จะม(เมธอดในการสAงข1อมEลชนด byte ท(=สอดคล1อง
  ก,บเมธอด read() ในคลาส InputStream โดยคลาสน(Wจะม(เมธอด
  write() ท(เปZนเมธอดแบบ abstract ในรEปแบบตAางๆด,งน(W
            =
   •   void write(int c)
   •   void write(byte []b)
   •   void write(byte []b,int offset,int length)
คลาส OutputStream




 เมธอดอนๆท(ส>าค,ญ
            =
   •   void close()
   •   void flush()
คลาสประเภท Character Stream
 ภาษาจาวาก>าหนดคลาสพนฐานในการจ,ดการก,บอนพ2ตและเอาท8พตท(เปZน
                     W                               2 =
  ชนดข1อมEลแบบ char อยEAสองคลาสคอ Reader และ Writer
 คลาสท,WงสองเปZนคลาสแบบ abstract โดยม( subclass ท(=สบทอดมาเพอใช1
                                                             =
  ในการสร1างออปเจ@คส>าหร,บจ,ดการก,บโหนดต1นทางและปลายทางในรEปแบบ
  ตAางๆเชAน ไฟล8 หนAวยความจ>า และไบท8 เปZนต1น
คลาส Reader
   Reader   เป(นคลาสทใชในการอานขอมลของ stream ทเป(นชนดขอมลแบบ
    char
   Reader จะมเมธอดทเหมอนกบคลาส InputStream และมหลกการ
    ท"างานทสอดคลองกนแตจะรบขอมลหรอ argument ทเป(นชนดขอมล char
    โดยมเมธอดตางๆดงน/
     •   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      เป(นคลาสทใชในการเขยนขอมลของ stream ทเป(นชนดขอมลแบบ
    char
   Writer จะมเมธอดทเหมอนกบคลาส OutputStream และมหลกการท
    สอดคลองกนแตจะรบขอมลหรอ argument ทเป(นชนดขอมล char โดยม
    เมธอดตางๆดงน/
     •   void   write(int c)
     •   void   write(char []c)
     •   void   write(char []c,int offset,int length)
     •   void   close()
     •   void   flush()
 เมธอดเพ=มเตมเพอเข(ยนชนดข1อมEลท(=เปZน String
                =
     •   void write(String s)
     •   void write(String s,int offset,int length)
โหนดส>าหร,บ Stream
 ภาษาจาวาก>าหนดโหนดท(เปZนต1นทางและปลายทางของ stream ไว1สามแบบ
                      =
  คอ ไฟล8 หนAวยความจ>า และไปป^ (pipe)
 ไฟล8คอโหนดส>าหร,บ stream ท(เปZนไฟล8ส>าหร,บอAานหรอเข(ยนข1อมEลชนด
                             =
  byte
 หนAวยความจ>าคอโหนดส>าหร,บ stream ท(=ใช1ส>าหร,บอAานหรอเข(ยนข1อมEลท(=
  เปZนอะเรย8หรอ String
 ไปป^คอโหนดส>าหร,บ stream ท(จะสAงหรอร,บข1อมEลระหวAาง process หรอ
                             =
  โปรแกรมเธรด
คลาสทเป(นโหนดส>าหร,บ stream ตAางๆ
    ชนด              Byte Stream         Character Stream
                   FileInputStream          FileReader
    File
                   FileOutputStream         FileWriter

                 ByteArrayInputStream    CharArrayReader
Memory: Array
                 ByteArrayOutputStream   CharArrayWriter

                                           StringReader
Memory: String            -
                                           StringWriter

                   PipedInputStream        PipedReader
    Pipe
                  PipedOutputStream        PipedWriter
ตวอยางโปรแกรม FileCopy.java
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.java
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        แสดงต,วอยAางของการก@อบป_`ข1อมEลของไฟล8
  หนVงไฟล8ไปย,งไฟล8อ=น โดยใช1 byte stream
     =
 โปรแกรม FileCopyReader.java แสดงต,วอยAางของก@อปป_`ขอมEลของ
                                                         1
  ไฟล8เชAนเด(ยวก,บโปรแกรม FileCopy.java แตAจะใช1 character stream
การเช=อมตAอออปเจ@คของคลาส
 โดยท,วไปโปรแกรมภาษาจาวาจะใช1ออปเจ@คประเภท stream มากกวAาหนVง
       =                                                     =
  ออปเจ@คโดยจะเช=อมออปเจ@คของ stream ตAางๆเข1าด1วยก,นเพ=อใช1ในการ
  แปลงชนดข1อมEลประเภทตAางๆ



 ตวอยางแสดงการเชอมตอออปเจ@คของคลาส FileInputStream ทอาน
  ขอมลเข1ามาโดยม(ชนดข1อมEลเป(น byte เขากบออปเจ@คของคลาส
  DataInputStream เพอใชอานขอมลชนดอนๆได1มากขVWนเชน
     FileInputStream fin = new FileInputStream(“test.dat”);
     DataInputStream din = new DataInputStream(fin);
คลาสประเภท stream ระด,บสEง
 ออปเจ@คท(ใช1ในการเช=อมตAอ stream จะเปZนออปเจ@คของคลาสประเภท
           =
  steam ระด,บสEง (high-level stream) ซV=งสามารถท(จะอAานหรอเข(ยนข1อมEลท(=
                                                 =
  เปZนชนดข1อมEลอ=นๆแล1วแปลงข1อมEลให1เปZนชนดข1อมEลแบบ byte หรอม(
  บ,ฟเฟอร8ในการเพ=มประสทธภาพในการอAานหรอเข(ยนข1อมEล
 คลาสเหลAาน(จะไมAสามารถอAานหรอเข(ยนข1อมEลไปย,งโหนดต1นทางหรอปลาย
             W
  ทางท(เปZนไฟล8 หนAวยความจ>า หรอ Pipe ได1โดยตรง แตAจะร,บข1อมEลมาจาก
       =
  stream อ=นๆท(=เปZนคลาสพนฐานในการอAานหรอเข(ยนข1อมEล
                         W
คลาสประเภท stream ระด,บสEงท(ส>าค,ญ
                                         =
   DataInputStream และ DataOutputStream
     •   เปZนคลาสท(=ใช1ในการแปลงชนดข1อมEลระหวAางชนดข1อมEลแบบ byte ก,บชนดข1อมEล
         แบบอ=นๆ
   BufferedInputStream           และ   BufferedOutputStream
     •   เปZนคลาสท(=ม(บ,ฟเฟอร8ส>าหร,บชนดข1อมEล byte อยEAภายในเพ=อให1สามารถอAานหรอ
         เข(ยนข1อมEลขนาดใหญA ซV=งจะชAวยเพ=มประสทธภาพในการอAานหรอเข(ยนข1อมEล
   PrintStream
     •   เปZนคลาสท(=ใช1ในการเข(ยนข1อความท(เปZน String ท(แปลงมาจากชนดข1อมEลแบบ
                                          =              =
         byte ออปเจ@คท(=ชอ out และ err ท(=อยEในคลาสท(=ชอ System เปZนต,วอยAางขอ
                          =                   A        =
         งออปเจ@คท(ใช1คลาสน(W
                   =
   PushbackInputStream
     •   คลาสน/อนญาตใหสงขอมลชนด byte ทเพงอานมากลบไปยง stream ได
คลาสประเภท stream ระด,บสEงท(ส>าค,ญ
                                         =
   ButteredReader และ BufferedWriter
     •   เปZนคลาสท(=ม(บ,ฟเฟอร8ส>าหร,บชนดข1อมEลแบบ char เพ=อให1สามารถอAานหรอเข(ยน
         ข1อมEลข1อใหญAได1
   InputStreamReader และ OutputStreamWriter
     •   เปZนคลาสท(=ใช1ในการแปลงชนดข1อมEลระหวAางชนดข1อมEลแบบ char ก,บชนดข1อมEล
         แบบอ=นๆ
   PrintWriter
     •   เปZนคลาสท(=ใช1ในการเข(ยนข1อความท(เปZน String ท(แปลงมาจากชนดข1อมEลแบบ
                                          =             =
         char
   PushbackReader
     •   เปZนคลาสท(=อน2ญาตให1สAงข1อมEลชนด char ท(เพ=งอAานมากล,บไปย,ง stream ได1
                                                 =
คลาสประเภท stream ระด,บสEง

    ชนด             Byte Stream        Character Stream
                BufferedInputStream     BufferedReader
 Buffering
                BufferedOutputStream    BufferedWriter
                 FilterInputStream       FilterReader
 Filtering
                FilterOutputStream       FilterWriter
   Data           DataInputStream
                                              -
 conversion      DataOutputStream
  Printing          PrintStream          PrintWriter
Peeking ahead   PushbackInputStream     PushbackReader
การเชอมตอ Stream หลายช/น
 เราสามารถเชอมตอ   Stream ไดหลายช/น เชน
    FileInputStream f = new FileInputStream(“text.dat”);
    BufferedInputStream b = new BufferedInputStream(f);
    DataInputStream d = new DataInputStream(b);
คลาส DataInputStream
 คลาส DataInputStream    มเมธอดในการอานขอมลชนดตางๆดงน/
   •   boolean readBoolean()
   •   byte readByte()
   •   char readChar()
   •   double readDouble()
   •   float readFloat()
   •   int readInt()
   •   long readLong()
   •   short readShort()
   •   String readUTF()
คลาส DataOutputStream
   DateOutputStream เป(น     high-level FilterStream ซ3งมเมธอดในการ
    เขยนขอมลชนดตางๆดงน/
     •   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)
ตวอยางของการใช1คลาส 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());
                }
        }
}
ตวอยางโปรแกรม DataInputStream
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());
         }
     }
}
การแปลงขอมลระหวาง byte และ char
 เราสามารถท(=จะแปลง stream ระหวAางชนดข1อมEลแบบ byte และชนดข1อมEล
  แบบ char ได1โดยใช1
   •   คลาส InputStreamReader ซV=งจะอAานชนดข1อมEลแบบ byte แล1วแปลงเปZน
       ชนดข1อมEลแบบ char
   •   คลาส OutputStreamWriter ซV=งจะอAานชนดข1อมEลแบบ char แล1วแปลงเปZน
       ชนดข1อมEลแบบ byte
ตวอยางโปรแกรมเพอเก4บขอความลงในไฟล
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);
ตวอยางโปรแกรมเพอเก4บขอความลงในไฟล
                  p.close();
                  oout.close();
                  fout.close();
           } catch (IOException ex) {
                  System.out.println(ex.toString());
           }
       }
}
ตวอยางโปรแกรมเพออานขอมลจากไฟล
import java.io.*;

public class FileReader {
    public static void main(String args[]) {
        try {
            FileInputStream fin = new FileInputStream("c:data.dat");
            InputStreamReader in = new InputStreamReader(fin);
            BufferedReader bin = new BufferedReader(in);
            System.out.println(bin.readLine());
            System.out.println(bin.readLine());
            bin.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
คลาส File
 คลาสท(=ช=อ FileเปZนคลาสท(=อยEในแพคเก@จ java.io เปZนคลาสท(=ใช1ใน
                                A
  การสร1างออปเจ@คท(=เปZนไฟล8หรอไดเร@กทอร(=
 คลาส File จะม(เมธอดในการจ,ดการก,บไฟล8หรอไดเร@กทอร(= และเมธอดใน
  การสบค1นข1อมEลตAางๆอยEหลายเมธอด
                        A
 ออปเจ@คของคลาส File จะสร1างมาจาก constructor ท(=ม(รEปแบบด,งน(W
   •   public File(String name)
   •   public File(String dir, String name)
   •   public File(File dir, String name)
เมธอดของคลาส File
 เมธอดของคลาส File ท(ใช1ในการสบค1นข1อมEลหรอจ,ดการก,บไฟล8ท(=ส>าค,ญม(
                      =
  ด,งน(W
    •   boolean exists()
    •   boolean isFile()
    •   boolean isDirectory()
    •   String getName()
    •   String getParent()
    •   String []list()
    •   boolean canWrite()
    •   boolean mkdir()
    •   boolean renameTo(File newName)
การสร1างออปเจ@คของคลาส File
 เราสามารถสรางออปเจ4คชนดคลาส File เพอตรวจสอบวามไฟลดงกลาว
  หรอไม
 Constructor ของ FileInputStream/FileOutputStream หรอ
  FileReader/FileWriter ม argument ทเป(นออปเจ4คชนดคลาส File
 ตวอยาง
     File f = new File(“test.dat”);
     if (f.exists()) {
           FileInputStream fir = new FileInputStream(f);
     }
คลาส RandomAccessFile
 ภาษาจาวาม(คลาสท(=สน,บสน2นการอAานหรอเข(ยนไฟล8เปZนแบบ random
  access กลAาวคอไมAจ>าเปZนจะต1องอAานหรอเข(ยนข1อมEลของไฟล8เร(ยงตาม
  ล>าด,บจากต>าแหนAงแรกส2ดไปย,งต>าแหนAงส2ดท1ายของไฟล8 คลาสประเภทน(คอ
                                                                  W
  คลาส RandomAccessFile ซV=งจะใช1เวลาในการอAานหรอเข(ยนข1อมEลใน
  ต>าแหนAงตAางๆเทAาก,น
 คลาส RandomAccessFile จะม( constructor อยEสองรEปแบบด,งน(W
                                            A
   •   public RandomAccessFile(String name,String mode)
   •   public RandomAccessFile(File file,String mode)
       mode อาจก"าหนดเป(น
         •   “r” เป( นการเปcดไ ฟลเพ=ออานขอมล
                   ปZ
         •   “rw” เป( นการเปcด ไฟลเพ=ออานและเขยนขอมล
                      ปZ
เมธอดของคลาส RandomAccessFile
 คลาส RandomAccessFile จะม(เมธอดส>าหร,บการอAานและเข(ยนข1อมEล
  ท(เปZนชนดข1อมEลแบบพนฐานชนดตAางๆคล1ายก,บคลาส
    =                W
  DataInputStream และ DataOutputStream
 คลาส RandomAccessFile ม(เมธอดอ=นๆท(ส>าค,ญเพ=มเตมมาด,งน(W
                                     =
   •   long getFilePointer()
   •   long length()
   •   void seek(long pos)
ObjectStream
 ภาษาจาวามคลาสทใชในการรบและสงขอมลของออปเจ4คทชอ
    •   ObjectInputStream
    •   ObjectOutputStream
 ท,งน(Wออปเจ@คท(=จะสามารถสAงผAาน stream เหลAาน(ได1จะต1องเปZนออปเจ@คของ
    W                                           W
  คลาสท(= implements อนเตอร8เฟส Serializable ซV=งเปZนอนเตอร8เฟส
  ในแพคเก@จ java.io
 ออปเจ@คบางประเภทจะไมAสามารถท(จะ implements อนเตอร8เฟส
                               =
  Serializable ได1 เนองจากข1อมEลของออปเจ@คอาจเปล(=ยนแปลงได1ตลอด
                     =
  เวลา อาทเชAน ออปเจ@คของคลาส Thread หรอ FileInputStream
ObjectStream
 เราสามารถจะระบ2คณล,กษณะของออปเจ@คหรอค2ณล,กษณะของคลาสท(ไมA
                  2                                     =
  ต1องการจะเก@บหรอเร(ยกดEข1อมEลผAาน stream ได1โดยการระบ2ให1ค2ณล,กษณะ
  ด,งกลAาวม( modifier เปZนค(ยเวร8ดท(ช=อ transient ต,วอยAางเชAน
                             8      =
       public class Student implements Serializable {
           private String id,name;
           private double gpa;
           private transient String parent;
       }

 คลาส ObjectOutputStream เปZนคลาสท(ใช1ในการเข(ยนออปเจ@คใดๆลง
                                    =
  ใน stream โดยม(เมธอด writeObject()ท(ใช1ในการเข(ยนข1อมEล
                                      =
 สAวนคลาส ObjectInputStream เปZนคลาสท(=ใช1ในการร,บออปเจ@คใดๆมา
  จาก stream โดยม(เมธอด readObject() ท(=ใช1ในการอAานข1อมEล
ต,วอยAางโปรแกรม
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();
ต,วอยAางโปรแกรม
                        fin = new FileInputStream("data.dat");
                        oin = new ObjectInputStream(fin);
                        Student s2 = (Student) oin.readObject();
                        System.out.print(s2.id);
                        …
                        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
    ผลล,พธ8ท(=ได1จากการร,นโปรแกรม   successfully
                                    ID: 4514452-2
                                    Name: Somchai
                                    GPA: 3.21
สร2ปเนอหาของบท
                            W
 stream เปร(ยบเสมอนทAอสAงข1อมEล สามารถแบAงออกได1เปZน 2 ประเภทคอ
  byte stream และ character stream
 byte stream ม(คลาสพนฐานคอ คลาส InputStream และ
                     W
  OutputStream
 character stream ม(คลาสพนฐานคอ คลาส Reader และ Writer
                          W
 คลาส InputStream จะใช1ในการอAานข1อมEลของ stream และ
  OutputStream จะน>าข1อมEลจากโหนดต1นทางเข1ามาใน stream ส>าหร,บ
  ข1อมEลท(=ม(ชนดข1อมEลเปZนแบบ byte
สร2ปเนอหาของบท
                            W
 คลาส Reader เปZนคลาสท(ใช1ในการอAานข1อมEลของ stream และ
                        =
  คลาสWriter เปZนคลาสท(=ใช1ในการเข(ยนข1อมEลของ stream ส>าหร,บข1อมEลท(=
  ม(ชนดข1อมEลเปZนแบบ char
 คลาสประเภท stream ระด,บสEงท(ส>าค,ญคอ คลาส DataInputStream,
                              =
  DataOutputStream, BufferedInputStream,
  BufferedOutputStream, PrintStream,
  PushbackInputStream, BufferedReader, BufferedWriter,
  InputStreamReader, OutputStreamWriter, PrintWriter
  และ PushbackReader
 การเช=อมตAอ stream หลายช,Wน จะท>าให1สามารถเร(ยกใช1เมธอดได1หลายรEป
  แบบตามความต1องการในการใช1งาน
สร2ปเนอหาของบท
                            W
 คลาส File ใช1ในการสร1างออปเจ@คของไฟล8หรอไดเร@กทอร(= โดยจะม(เมธอด
  ท(ใช1ในการจ,ดการก,บไฟล8
    =
 คลาส RandomAccessFile     จะม(รปแบบในการอAานและเข(ยนข1อมEลเปZน
                                 E
  แบบ random access
 ออปเจ@คท(จะสามารถร,บหรอสAงผAาน stream ได1จะต1องเปZนออปเจ@คของคลาส
           =
  ท(= implements อนเตอร8เฟส Serializable
แบบฝhกห,ด
 ข1อท(= 1
    •   จากโปรแกรมจ>าลองระบบธนาคาร ให1ทดลองเข(ยนโปรแกรมเพอเก@บข1อมEลตAางๆลง
                                                         =
        ไฟล8 และสามารถเร(ยกกล,บมาใช1งานได1อยAางถEกต1อง

More Related Content

PPTX
Cassandra compaction
Kazutaka Tomita
 
PPTX
Breeding for Brown Plant Hopper (BPH) resistance in Rice.
Ankita Jena
 
PPTX
Breeding Cross-pollinated Crops and Clonally Propagated Ones
ishtiaq shariq
 
PPTX
Wide hybridization in cotton
Divya S
 
PPTX
Organic Pest and Disease Management in Vegetables
Ramanjaneyulu GV
 
PDF
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Thanachart Numnonda
 
PDF
Planning on Mobile Strategy
Thanachart Numnonda
 
PPT
Java Programming [1/12] : Introduction
IMC Institute
 
Cassandra compaction
Kazutaka Tomita
 
Breeding for Brown Plant Hopper (BPH) resistance in Rice.
Ankita Jena
 
Breeding Cross-pollinated Crops and Clonally Propagated Ones
ishtiaq shariq
 
Wide hybridization in cotton
Divya S
 
Organic Pest and Disease Management in Vegetables
Ramanjaneyulu GV
 
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Thanachart Numnonda
 
Planning on Mobile Strategy
Thanachart Numnonda
 
Java Programming [1/12] : Introduction
IMC Institute
 

Viewers also liked (9)

PDF
Java Programming: อะเรย์และคอลเล็กชั่น
Thanachart Numnonda
 
PDF
Java Programming: การจัดการกับข้อผิดพลาด
Thanachart Numnonda
 
PDF
Java Programming: โครงสร้างควบคุม
Thanachart Numnonda
 
PPT
Java Programming [4/12] : Object Oriented Concept
IMC Institute
 
PDF
บทที่ 3 พื้นฐานภาษา Java
Itslvle Parin
 
PDF
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Thanachart Numnonda
 
PDF
พื้นฐานโปรแกรมภาษาจาวา
Thanachart Numnonda
 
PDF
ความรู้เบื้องต้นภาษาจาวา
Thanachart Numnonda
 
PDF
Java Web programming Using NetBeans
Software Park Thailand
 
Java Programming: อะเรย์และคอลเล็กชั่น
Thanachart Numnonda
 
Java Programming: การจัดการกับข้อผิดพลาด
Thanachart Numnonda
 
Java Programming: โครงสร้างควบคุม
Thanachart Numnonda
 
Java Programming [4/12] : Object Oriented Concept
IMC Institute
 
บทที่ 3 พื้นฐานภาษา Java
Itslvle Parin
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Thanachart Numnonda
 
พื้นฐานโปรแกรมภาษาจาวา
Thanachart Numnonda
 
ความรู้เบื้องต้นภาษาจาวา
Thanachart Numnonda
 
Java Web programming Using NetBeans
Software Park Thailand
 
Ad

Similar to Java Programming: คลาสอินพุตและเอาต์พุต (20)

PPT
Java Programming [11/12] : Input and Output Classes
IMC Institute
 
PDF
Java-Chapter 06 File Operations
Wongyos Keardsri
 
PPTX
Computer Programming 1
Saranyu Srisrontong
 
PPT
พื้นฐานภาษาจาวา
Aeew Autaporn
 
PDF
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
Naphamas
 
PDF
Java-Chapter 02 Data Operations and Processing
Wongyos Keardsri
 
PPTX
Lab Computer Programming 1
Saranyu Srisrontong
 
PDF
Java Programming: หลักการเชิงอ็อบเจกต์
Thanachart Numnonda
 
PDF
บทที่ 3 พื้นฐานภาษา Java
Itslvle Parin
 
PDF
พื้นฐานภาษาจาวา
T'tle Tanwarat
 
PPT
Java Programming [2/12] : Overview of Java Programming Language
IMC Institute
 
PDF
ภาษา C#
ictyangtalad
 
PPT
Class1
Nookky Anapat
 
PDF
ตัวแปรกับชนิดของข้อมูล
เทวัญ ภูพานทอง
 
PDF
Java-Chapter 14 Creating Graphics with DWindow
Wongyos Keardsri
 
PDF
บทที่ 10 ตัวแปรสตริ
Theeravaj Tum
 
Java Programming [11/12] : Input and Output Classes
IMC Institute
 
Java-Chapter 06 File Operations
Wongyos Keardsri
 
Computer Programming 1
Saranyu Srisrontong
 
พื้นฐานภาษาจาวา
Aeew Autaporn
 
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
Naphamas
 
Java-Chapter 02 Data Operations and Processing
Wongyos Keardsri
 
Lab Computer Programming 1
Saranyu Srisrontong
 
Java Programming: หลักการเชิงอ็อบเจกต์
Thanachart Numnonda
 
บทที่ 3 พื้นฐานภาษา Java
Itslvle Parin
 
พื้นฐานภาษาจาวา
T'tle Tanwarat
 
Java Programming [2/12] : Overview of Java Programming Language
IMC Institute
 
ภาษา C#
ictyangtalad
 
ตัวแปรกับชนิดของข้อมูล
เทวัญ ภูพานทอง
 
Java-Chapter 14 Creating Graphics with DWindow
Wongyos Keardsri
 
บทที่ 10 ตัวแปรสตริ
Theeravaj Tum
 
Ad

More from Thanachart Numnonda (20)

PDF
Thailand Digital Industry Survey Result 2021
Thanachart Numnonda
 
PDF
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
Thanachart Numnonda
 
PDF
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
Thanachart Numnonda
 
PDF
Software Trends Towards AEC 2015
Thanachart Numnonda
 
PDF
Personal Cloud
Thanachart Numnonda
 
PDF
How would cloud computing Effect to Software Industry?
Thanachart Numnonda
 
PDF
Impact of cloud computing to Asian IT Industry
Thanachart Numnonda
 
PDF
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
Thanachart Numnonda
 
PDF
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
Thanachart Numnonda
 
PDF
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
Thanachart Numnonda
 
PDF
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
Thanachart Numnonda
 
PDF
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Thanachart Numnonda
 
PDF
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
Thanachart Numnonda
 
PDF
บทความ Google vs. Android
Thanachart Numnonda
 
PDF
IT trends for co-creation
Thanachart Numnonda
 
PDF
Technology Trends & The Impact for Software Industry
Thanachart Numnonda
 
PDF
อยากอยู่ 110 ปี
Thanachart Numnonda
 
PDF
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Thanachart Numnonda
 
PDF
Intermediate Java Programming Language (in Thai)
Thanachart Numnonda
 
Thailand Digital Industry Survey Result 2021
Thanachart Numnonda
 
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
Thanachart Numnonda
 
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
Thanachart Numnonda
 
Software Trends Towards AEC 2015
Thanachart Numnonda
 
Personal Cloud
Thanachart Numnonda
 
How would cloud computing Effect to Software Industry?
Thanachart Numnonda
 
Impact of cloud computing to Asian IT Industry
Thanachart Numnonda
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
Thanachart Numnonda
 
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
Thanachart Numnonda
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
Thanachart Numnonda
 
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
Thanachart Numnonda
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Thanachart Numnonda
 
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
Thanachart Numnonda
 
บทความ Google vs. Android
Thanachart Numnonda
 
IT trends for co-creation
Thanachart Numnonda
 
Technology Trends & The Impact for Software Industry
Thanachart Numnonda
 
อยากอยู่ 110 ปี
Thanachart Numnonda
 
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Thanachart Numnonda
 
Intermediate Java Programming Language (in Thai)
Thanachart Numnonda
 

Java Programming: คลาสอินพุตและเอาต์พุต

  • 1. บทท 10 คลาสอนพตและเอาทพต (Input/Output Classes) ผศ.ธนศา เครอไวศยวรรณ คณะเทคโนโลย(สารสนเทศ สถาบ,นเทคโนโลย(พระจอมเกล1าเจ1าค2ณทหารลาดกระบ,ง
  • 2. ว,ตถ2ประสงค8  อธบายความหมายและประเภทของ stream  อธบายองค8ประกอบท(ส>าค,ญของแพคเก@จ java.io =  แนะน>าคลาสและเมธอดของคลาส InputStream และ OutputStream  แนะน>าคลาสและเมธอดของคลาส Reader และ Writer  อธบายความแตกตAางระหวAางคลาส Reader และ Writer ก,บ stream  อธบายการสร1างและใช1 stream แบบตAางๆ
  • 3. ว,ตถ2ประสงค8  แนะน>าคลาสและเมธอดของคลาส File  อธบายการอAาน เข(ยนและอ,พเดทข1อมEลของคลาส RandomAccessFile  อธบายการใช1อนเตอร8เฟสท(=ช=อ Serializable  อธบายวธ(การเข(ยนและอAานข1อมEลของออปเจ@คผAาน stream
  • 4. Stream  เปรยบเสมอนทอสงขอมลจากตนทาง (source) ไปยงปลายทาง (sink)  streamชวยท"าใหผเขยนโปรแกรม ไมจ"าเป(นตองทราบรายละเอยดการ ตดตอกบฮารดแวรหรอซอฟตแวรทใชในการสงขอมล เพยงแตตองรเมธอดท ใชในการรบหรอสงขอมล  source เป(นต"าแหนงเรมตนของ stream เรยกวา input stream  sink เป(นต"าแหนงส/นสดของ stream เรยกวา output stream
  • 5. Stream  source หรอ sink อาจเป(นฮารดแวรหรอซอฟตแวร เชน ไฟล หนวยความจ"า หรอ socket เป(นตน  ภาษาจาวาแบง stream ออกเป(น • byte stream • character stream  ค"าวา stream โดยทวไปจะหมายถ3ง byte stream  reader และ writer จะหมายถ3ง character stream
  • 6. แพคเก4จ java.io  คลาสทเกยวกบอนพตและเอาทพตจะถEกก>าหนดโดย Java API ในแพคเก4จ java.io ซV=งจะม(คลาสพWนฐานอยEA 4 คลาสคอ • InputStream เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการร,บชนดข1อมEลแบบ byte = • OutputStream เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการสAงชนดข1อมEลแบบ byte = • Reader เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการร,บชนดข1อมEลแบบ char = • Writer เปZนคลาสท(=ใช1ในการสร1างออปเจ@คท(เปZน stream ในการสAงชนดข1อมEลแบบ char =
  • 11. คลาสประเภท Byte Stream  ภาษาจาวาจะม(คลาสพนฐานในการจ,ดการก,บอนพ2ตและเอาท8พ2ตท(=เปZนชนด W ข1อมEลแบบ byte อยEสองคลาสท(=คEAก,นคอ InputStream และ A OutputStream  คลาสท,WงสองเปZนคลาสแบบ abstract ซV=งเราไมAสามารถท(=จะสร1างออปเจ@ค ของคลาสท,งสองได1 แตAคลาสท,Wงสองจะม(คลาสท(=เปZน subclass ซV=งจะใช1ใน W การสร1างออปเจ@คส>าหร,บการร,บและสAงข1อมEลแบบ byte ของโหนดท(=ม( ต1นทางและปลายทางแบบตAางๆอาทเชAน • FileInputStream และ FileOutputStream เปZนคลาสท(=ใช1ในการสร1าง ออปเจ@คส>าหร,บต1นทางและปลายทางท(=เปZนไฟล8 • ByteArrayInputStream และ ByteArrayOutputStream เปZนคลาสท(=ใช1 ในการสร1างออปเจ@คส>าหร,บต1นทางและปลายทาง ท(=เปZนอะเรย8ของชนดข1อมEลแบบ byte
  • 12. คลาส InputStream  คลาส InputStream จะใช1ในการอAานข1อมEลของ stream ท(=เปZนชนดข1อมEล แบบ byte  คลาส InputStream จะน>าข1อมEลจากโหนดต1นทางเข1ามาใน stream และ การอAานข1อมEลจาก stream จะเปZนการลบข1อมEลท(อAานออกจาก stream โดย = ม(เมธอดท(ใช1ส>าหร,บการอAานข1อมEลท(=เปZน byte หรออะเรย8ของ byte = เทAาน,นด,งน(W W • int read() • int read(byte []b) • int read(byte []b,int offset,int length)
  • 13. คลาส InputStream  เมธอดอนๆท(ส>าค,ญ = • void close() • int available() • void skip(long n) • boolean markSupported() • void mark(int readlimit) • void reset()
  • 14. คลาส OutputStream  คลาส OutputStream จะใช1การสAงข1อมEลของ stream ท(=เปZนชนดข1อมEล แบบ byte การสAงข1อมEลของออบเจ@คชนด Outputstream จะเปZนการเพ=ม ข1อมEลลงใน stream  คลาส OutputStream จะม(เมธอดในการสAงข1อมEลชนด byte ท(=สอดคล1อง ก,บเมธอด read() ในคลาส InputStream โดยคลาสน(Wจะม(เมธอด write() ท(เปZนเมธอดแบบ abstract ในรEปแบบตAางๆด,งน(W = • void write(int c) • void write(byte []b) • void write(byte []b,int offset,int length)
  • 16. คลาสประเภท Character Stream  ภาษาจาวาก>าหนดคลาสพนฐานในการจ,ดการก,บอนพ2ตและเอาท8พตท(เปZน W 2 = ชนดข1อมEลแบบ char อยEAสองคลาสคอ Reader และ Writer  คลาสท,WงสองเปZนคลาสแบบ abstract โดยม( subclass ท(=สบทอดมาเพอใช1 = ในการสร1างออปเจ@คส>าหร,บจ,ดการก,บโหนดต1นทางและปลายทางในรEปแบบ ตAางๆเชAน ไฟล8 หนAวยความจ>า และไบท8 เปZนต1น
  • 17. คลาส Reader  Reader เป(นคลาสทใชในการอานขอมลของ stream ทเป(นชนดขอมลแบบ char  Reader จะมเมธอดทเหมอนกบคลาส InputStream และมหลกการ ท"างานทสอดคลองกนแตจะรบขอมลหรอ argument ทเป(นชนดขอมล char โดยมเมธอดตางๆดงน/ • 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()
  • 18. คลาส Writer  Writer เป(นคลาสทใชในการเขยนขอมลของ stream ทเป(นชนดขอมลแบบ char  Writer จะมเมธอดทเหมอนกบคลาส OutputStream และมหลกการท สอดคลองกนแตจะรบขอมลหรอ argument ทเป(นชนดขอมล char โดยม เมธอดตางๆดงน/ • void write(int c) • void write(char []c) • void write(char []c,int offset,int length) • void close() • void flush()  เมธอดเพ=มเตมเพอเข(ยนชนดข1อมEลท(=เปZน String = • void write(String s) • void write(String s,int offset,int length)
  • 19. โหนดส>าหร,บ Stream  ภาษาจาวาก>าหนดโหนดท(เปZนต1นทางและปลายทางของ stream ไว1สามแบบ = คอ ไฟล8 หนAวยความจ>า และไปป^ (pipe)  ไฟล8คอโหนดส>าหร,บ stream ท(เปZนไฟล8ส>าหร,บอAานหรอเข(ยนข1อมEลชนด = byte  หนAวยความจ>าคอโหนดส>าหร,บ stream ท(=ใช1ส>าหร,บอAานหรอเข(ยนข1อมEลท(= เปZนอะเรย8หรอ String  ไปป^คอโหนดส>าหร,บ stream ท(จะสAงหรอร,บข1อมEลระหวAาง process หรอ = โปรแกรมเธรด
  • 20. คลาสทเป(นโหนดส>าหร,บ stream ตAางๆ ชนด Byte Stream Character Stream FileInputStream FileReader File FileOutputStream FileWriter ByteArrayInputStream CharArrayReader Memory: Array ByteArrayOutputStream CharArrayWriter StringReader Memory: String - StringWriter PipedInputStream PipedReader Pipe PipedOutputStream PipedWriter
  • 21. ตวอยางโปรแกรม FileCopy.java 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) { } } }
  • 22. ตวอยางโปรแกรม FileCopyReader.java 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) { } } }
  • 23. อธบายตวอยางโปรแกรม  โปรแกรม FileCopy.java แสดงต,วอยAางของการก@อบป_`ข1อมEลของไฟล8 หนVงไฟล8ไปย,งไฟล8อ=น โดยใช1 byte stream =  โปรแกรม FileCopyReader.java แสดงต,วอยAางของก@อปป_`ขอมEลของ 1 ไฟล8เชAนเด(ยวก,บโปรแกรม FileCopy.java แตAจะใช1 character stream
  • 24. การเช=อมตAอออปเจ@คของคลาส  โดยท,วไปโปรแกรมภาษาจาวาจะใช1ออปเจ@คประเภท stream มากกวAาหนVง = = ออปเจ@คโดยจะเช=อมออปเจ@คของ stream ตAางๆเข1าด1วยก,นเพ=อใช1ในการ แปลงชนดข1อมEลประเภทตAางๆ  ตวอยางแสดงการเชอมตอออปเจ@คของคลาส FileInputStream ทอาน ขอมลเข1ามาโดยม(ชนดข1อมEลเป(น byte เขากบออปเจ@คของคลาส DataInputStream เพอใชอานขอมลชนดอนๆได1มากขVWนเชน FileInputStream fin = new FileInputStream(“test.dat”); DataInputStream din = new DataInputStream(fin);
  • 25. คลาสประเภท stream ระด,บสEง  ออปเจ@คท(ใช1ในการเช=อมตAอ stream จะเปZนออปเจ@คของคลาสประเภท = steam ระด,บสEง (high-level stream) ซV=งสามารถท(จะอAานหรอเข(ยนข1อมEลท(= = เปZนชนดข1อมEลอ=นๆแล1วแปลงข1อมEลให1เปZนชนดข1อมEลแบบ byte หรอม( บ,ฟเฟอร8ในการเพ=มประสทธภาพในการอAานหรอเข(ยนข1อมEล  คลาสเหลAาน(จะไมAสามารถอAานหรอเข(ยนข1อมEลไปย,งโหนดต1นทางหรอปลาย W ทางท(เปZนไฟล8 หนAวยความจ>า หรอ Pipe ได1โดยตรง แตAจะร,บข1อมEลมาจาก = stream อ=นๆท(=เปZนคลาสพนฐานในการอAานหรอเข(ยนข1อมEล W
  • 26. คลาสประเภท stream ระด,บสEงท(ส>าค,ญ =  DataInputStream และ DataOutputStream • เปZนคลาสท(=ใช1ในการแปลงชนดข1อมEลระหวAางชนดข1อมEลแบบ byte ก,บชนดข1อมEล แบบอ=นๆ  BufferedInputStream และ BufferedOutputStream • เปZนคลาสท(=ม(บ,ฟเฟอร8ส>าหร,บชนดข1อมEล byte อยEAภายในเพ=อให1สามารถอAานหรอ เข(ยนข1อมEลขนาดใหญA ซV=งจะชAวยเพ=มประสทธภาพในการอAานหรอเข(ยนข1อมEล  PrintStream • เปZนคลาสท(=ใช1ในการเข(ยนข1อความท(เปZน String ท(แปลงมาจากชนดข1อมEลแบบ = = byte ออปเจ@คท(=ชอ out และ err ท(=อยEในคลาสท(=ชอ System เปZนต,วอยAางขอ = A = งออปเจ@คท(ใช1คลาสน(W =  PushbackInputStream • คลาสน/อนญาตใหสงขอมลชนด byte ทเพงอานมากลบไปยง stream ได
  • 27. คลาสประเภท stream ระด,บสEงท(ส>าค,ญ =  ButteredReader และ BufferedWriter • เปZนคลาสท(=ม(บ,ฟเฟอร8ส>าหร,บชนดข1อมEลแบบ char เพ=อให1สามารถอAานหรอเข(ยน ข1อมEลข1อใหญAได1  InputStreamReader และ OutputStreamWriter • เปZนคลาสท(=ใช1ในการแปลงชนดข1อมEลระหวAางชนดข1อมEลแบบ char ก,บชนดข1อมEล แบบอ=นๆ  PrintWriter • เปZนคลาสท(=ใช1ในการเข(ยนข1อความท(เปZน String ท(แปลงมาจากชนดข1อมEลแบบ = = char  PushbackReader • เปZนคลาสท(=อน2ญาตให1สAงข1อมEลชนด char ท(เพ=งอAานมากล,บไปย,ง stream ได1 =
  • 28. คลาสประเภท stream ระด,บสEง ชนด Byte Stream Character Stream BufferedInputStream BufferedReader Buffering BufferedOutputStream BufferedWriter FilterInputStream FilterReader Filtering FilterOutputStream FilterWriter Data DataInputStream - conversion DataOutputStream Printing PrintStream PrintWriter Peeking ahead PushbackInputStream PushbackReader
  • 29. การเชอมตอ Stream หลายช/น  เราสามารถเชอมตอ Stream ไดหลายช/น เชน FileInputStream f = new FileInputStream(“text.dat”); BufferedInputStream b = new BufferedInputStream(f); DataInputStream d = new DataInputStream(b);
  • 30. คลาส DataInputStream  คลาส DataInputStream มเมธอดในการอานขอมลชนดตางๆดงน/ • boolean readBoolean() • byte readByte() • char readChar() • double readDouble() • float readFloat() • int readInt() • long readLong() • short readShort() • String readUTF()
  • 31. คลาส DataOutputStream  DateOutputStream เป(น high-level FilterStream ซ3งมเมธอดในการ เขยนขอมลชนดตางๆดงน/ • 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)
  • 32. ตวอยางของการใช1คลาส 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()); } } }
  • 33. ตวอยางโปรแกรม DataInputStream 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);
  • 34. ตวอยางโปรแกรม DataInputStream din.close(); fin.close(); } catch (IOException ex) { System.out.println(ex.toString()); } } }
  • 35. การแปลงขอมลระหวาง byte และ char  เราสามารถท(=จะแปลง stream ระหวAางชนดข1อมEลแบบ byte และชนดข1อมEล แบบ char ได1โดยใช1 • คลาส InputStreamReader ซV=งจะอAานชนดข1อมEลแบบ byte แล1วแปลงเปZน ชนดข1อมEลแบบ char • คลาส OutputStreamWriter ซV=งจะอAานชนดข1อมEลแบบ char แล1วแปลงเปZน ชนดข1อมEลแบบ byte
  • 36. ตวอยางโปรแกรมเพอเก4บขอความลงในไฟล 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);
  • 37. ตวอยางโปรแกรมเพอเก4บขอความลงในไฟล p.close(); oout.close(); fout.close(); } catch (IOException ex) { System.out.println(ex.toString()); } } }
  • 38. ตวอยางโปรแกรมเพออานขอมลจากไฟล import java.io.*; public class FileReader { public static void main(String args[]) { try { FileInputStream fin = new FileInputStream("c:data.dat"); InputStreamReader in = new InputStreamReader(fin); BufferedReader bin = new BufferedReader(in); System.out.println(bin.readLine()); System.out.println(bin.readLine()); bin.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
  • 39. คลาส File  คลาสท(=ช=อ FileเปZนคลาสท(=อยEในแพคเก@จ java.io เปZนคลาสท(=ใช1ใน A การสร1างออปเจ@คท(=เปZนไฟล8หรอไดเร@กทอร(=  คลาส File จะม(เมธอดในการจ,ดการก,บไฟล8หรอไดเร@กทอร(= และเมธอดใน การสบค1นข1อมEลตAางๆอยEหลายเมธอด A  ออปเจ@คของคลาส File จะสร1างมาจาก constructor ท(=ม(รEปแบบด,งน(W • public File(String name) • public File(String dir, String name) • public File(File dir, String name)
  • 40. เมธอดของคลาส File  เมธอดของคลาส File ท(ใช1ในการสบค1นข1อมEลหรอจ,ดการก,บไฟล8ท(=ส>าค,ญม( = ด,งน(W • boolean exists() • boolean isFile() • boolean isDirectory() • String getName() • String getParent() • String []list() • boolean canWrite() • boolean mkdir() • boolean renameTo(File newName)
  • 41. การสร1างออปเจ@คของคลาส File  เราสามารถสรางออปเจ4คชนดคลาส File เพอตรวจสอบวามไฟลดงกลาว หรอไม  Constructor ของ FileInputStream/FileOutputStream หรอ FileReader/FileWriter ม argument ทเป(นออปเจ4คชนดคลาส File  ตวอยาง File f = new File(“test.dat”); if (f.exists()) { FileInputStream fir = new FileInputStream(f); }
  • 42. คลาส RandomAccessFile  ภาษาจาวาม(คลาสท(=สน,บสน2นการอAานหรอเข(ยนไฟล8เปZนแบบ random access กลAาวคอไมAจ>าเปZนจะต1องอAานหรอเข(ยนข1อมEลของไฟล8เร(ยงตาม ล>าด,บจากต>าแหนAงแรกส2ดไปย,งต>าแหนAงส2ดท1ายของไฟล8 คลาสประเภทน(คอ W คลาส RandomAccessFile ซV=งจะใช1เวลาในการอAานหรอเข(ยนข1อมEลใน ต>าแหนAงตAางๆเทAาก,น  คลาส RandomAccessFile จะม( constructor อยEสองรEปแบบด,งน(W A • public RandomAccessFile(String name,String mode) • public RandomAccessFile(File file,String mode) mode อาจก"าหนดเป(น • “r” เป( นการเปcดไ ฟลเพ=ออานขอมล ปZ • “rw” เป( นการเปcด ไฟลเพ=ออานและเขยนขอมล ปZ
  • 43. เมธอดของคลาส RandomAccessFile  คลาส RandomAccessFile จะม(เมธอดส>าหร,บการอAานและเข(ยนข1อมEล ท(เปZนชนดข1อมEลแบบพนฐานชนดตAางๆคล1ายก,บคลาส = W DataInputStream และ DataOutputStream  คลาส RandomAccessFile ม(เมธอดอ=นๆท(ส>าค,ญเพ=มเตมมาด,งน(W = • long getFilePointer() • long length() • void seek(long pos)
  • 44. ObjectStream  ภาษาจาวามคลาสทใชในการรบและสงขอมลของออปเจ4คทชอ • ObjectInputStream • ObjectOutputStream  ท,งน(Wออปเจ@คท(=จะสามารถสAงผAาน stream เหลAาน(ได1จะต1องเปZนออปเจ@คของ W W คลาสท(= implements อนเตอร8เฟส Serializable ซV=งเปZนอนเตอร8เฟส ในแพคเก@จ java.io  ออปเจ@คบางประเภทจะไมAสามารถท(จะ implements อนเตอร8เฟส = Serializable ได1 เนองจากข1อมEลของออปเจ@คอาจเปล(=ยนแปลงได1ตลอด = เวลา อาทเชAน ออปเจ@คของคลาส Thread หรอ FileInputStream
  • 45. ObjectStream  เราสามารถจะระบ2คณล,กษณะของออปเจ@คหรอค2ณล,กษณะของคลาสท(ไมA 2 = ต1องการจะเก@บหรอเร(ยกดEข1อมEลผAาน stream ได1โดยการระบ2ให1ค2ณล,กษณะ ด,งกลAาวม( modifier เปZนค(ยเวร8ดท(ช=อ transient ต,วอยAางเชAน 8 = public class Student implements Serializable { private String id,name; private double gpa; private transient String parent; }  คลาส ObjectOutputStream เปZนคลาสท(ใช1ในการเข(ยนออปเจ@คใดๆลง = ใน stream โดยม(เมธอด writeObject()ท(ใช1ในการเข(ยนข1อมEล =  สAวนคลาส ObjectInputStream เปZนคลาสท(=ใช1ในการร,บออปเจ@คใดๆมา จาก stream โดยม(เมธอด readObject() ท(=ใช1ในการอAานข1อมEล
  • 46. ต,วอยAางโปรแกรม 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();
  • 47. ต,วอยAางโปรแกรม fin = new FileInputStream("data.dat"); oin = new ObjectInputStream(fin); Student s2 = (Student) oin.readObject(); System.out.print(s2.id); … 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 ผลล,พธ8ท(=ได1จากการร,นโปรแกรม successfully ID: 4514452-2 Name: Somchai GPA: 3.21
  • 48. สร2ปเนอหาของบท W  stream เปร(ยบเสมอนทAอสAงข1อมEล สามารถแบAงออกได1เปZน 2 ประเภทคอ byte stream และ character stream  byte stream ม(คลาสพนฐานคอ คลาส InputStream และ W OutputStream  character stream ม(คลาสพนฐานคอ คลาส Reader และ Writer W  คลาส InputStream จะใช1ในการอAานข1อมEลของ stream และ OutputStream จะน>าข1อมEลจากโหนดต1นทางเข1ามาใน stream ส>าหร,บ ข1อมEลท(=ม(ชนดข1อมEลเปZนแบบ byte
  • 49. สร2ปเนอหาของบท W  คลาส Reader เปZนคลาสท(ใช1ในการอAานข1อมEลของ stream และ = คลาสWriter เปZนคลาสท(=ใช1ในการเข(ยนข1อมEลของ stream ส>าหร,บข1อมEลท(= ม(ชนดข1อมEลเปZนแบบ char  คลาสประเภท stream ระด,บสEงท(ส>าค,ญคอ คลาส DataInputStream, = DataOutputStream, BufferedInputStream, BufferedOutputStream, PrintStream, PushbackInputStream, BufferedReader, BufferedWriter, InputStreamReader, OutputStreamWriter, PrintWriter และ PushbackReader  การเช=อมตAอ stream หลายช,Wน จะท>าให1สามารถเร(ยกใช1เมธอดได1หลายรEป แบบตามความต1องการในการใช1งาน
  • 50. สร2ปเนอหาของบท W  คลาส File ใช1ในการสร1างออปเจ@คของไฟล8หรอไดเร@กทอร(= โดยจะม(เมธอด ท(ใช1ในการจ,ดการก,บไฟล8 =  คลาส RandomAccessFile จะม(รปแบบในการอAานและเข(ยนข1อมEลเปZน E แบบ random access  ออปเจ@คท(จะสามารถร,บหรอสAงผAาน stream ได1จะต1องเปZนออปเจ@คของคลาส = ท(= implements อนเตอร8เฟส Serializable
  • 51. แบบฝhกห,ด  ข1อท(= 1 • จากโปรแกรมจ>าลองระบบธนาคาร ให1ทดลองเข(ยนโปรแกรมเพอเก@บข1อมEลตAางๆลง = ไฟล8 และสามารถเร(ยกกล,บมาใช1งานได1อยAางถEกต1อง