SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
บทท 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อง

Más contenido relacionado

Destacado

ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
Thanachart Numnonda
 

Destacado (12)

Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกJava Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิก
 
Planning on Mobile Strategy
Planning on Mobile StrategyPlanning on Mobile Strategy
Planning on Mobile Strategy
 
Java Programming [1/12] : Introduction
Java Programming [1/12] : IntroductionJava Programming [1/12] : Introduction
Java Programming [1/12] : Introduction
 
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่นJava Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่น
 
Java Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดJava Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาด
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
 
Java Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented ConceptJava Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented Concept
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Java
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
 
พื้นฐานโปรแกรมภาษาจาวา
พื้นฐานโปรแกรมภาษาจาวาพื้นฐานโปรแกรมภาษาจาวา
พื้นฐานโปรแกรมภาษาจาวา
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
 
Java Web programming Using NetBeans
Java Web programming Using NetBeansJava Web programming Using NetBeans
Java Web programming Using NetBeans
 

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

ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
Nattapon
 

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

Java Programming [11/12] : Input and Output Classes
Java Programming [11/12] : Input and Output ClassesJava Programming [11/12] : Input and Output Classes
Java Programming [11/12] : Input and Output Classes
 
งานนำเสนอ
งานนำเสนองานนำเสนอ
งานนำเสนอ
 
Java-Chapter 05 String Operations
Java-Chapter 05 String OperationsJava-Chapter 05 String Operations
Java-Chapter 05 String Operations
 
Lab Computer Programming 1
Lab Computer Programming 1Lab Computer Programming 1
Lab Computer Programming 1
 
7 2โครงสร้าง
7 2โครงสร้าง7 2โครงสร้าง
7 2โครงสร้าง
 
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionJava Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and Collection
 
Java Programming [2/12] : Overview of Java Programming Language
Java Programming [2/12] : Overview of Java Programming LanguageJava Programming [2/12] : Overview of Java Programming Language
Java Programming [2/12] : Overview of Java Programming Language
 
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
 
C Programming
C ProgrammingC Programming
C Programming
 
2การแสดงผลและการรับข้อมูล
2การแสดงผลและการรับข้อมูล2การแสดงผลและการรับข้อมูล
2การแสดงผลและการรับข้อมูล
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
 

Más de Thanachart Numnonda

Más de Thanachart Numnonda (20)

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

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อง