Chap11

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Chap11 as PDF for free.

More details

  • Words: 785
  • Pages: 12
Stream I/O

Modern Programming Languages

11

สตรีม (Stream I/O) 11.1

สตรีม (Stream)

ภาษาจาวาทําการจัดการกับขอมูลอินพุตและเอาตพุตโดยใชหลักการของสตรีม (Stream) ซึ่งสตรีม เปรียบเสมือนทอรับสงขอมูล จากตนทาง(source) ไปยังปลายทาง (sink) โดยที่ตนทางเปนตําแหนงเริ่มตนของ สตรีม เรียกวา input stream และปลายทางเปนตําแหนงสิ้นสุดของสตรีม เรียกวา output stream ในการพัฒนา โปรแกรมเพื่ อ สง ขอ มูล จากต น ทางไปยั ง ปลายทางนั้ น สตรีม ชว ยทํ า ใหผู เขี ย นโปรแกรมไมจํ า เปน ตอ งทราบ รายละเอียดการติดตอกับฮารดแวรหรือซอฟตแวรที่ใชในการรับสงขอมูล เพียงแตรูจักการรับสงขอมูลผานสตรีม เชน การอาน/เขียนไฟล การติดตอดวย socket ผานเครือขาย โดยภาษาจาวาแบงสตรีมออกเปน 2 ประเภทดังนี้ • •

byte stream character stream

11.1.1 แพ็คเกจ java.io

คลาสที่เกี่ยวของกับอินพุตและเอาตพุต ถูกกําหนดอยูในแพ็คเกจ java.io ประกอบไปดวยคลาสพื้นฐาน 4 คลาส คือ • InputStream เปนคลาสที่ใชในการสรางออบเจกตที่เปนสตรีมในการรับชนิดขอมูลแบบ byte • OutputStream เปนคลาสที่ใชในการสรางออบเจกตที่เปนสตรีมในการสงชนิดขอมูลแบบ byte • Reader เปนคลาสที่ใชในการสรางออบเจกตที่เปนสตรีมในการรับชนิดขอมูลแบบ char • Writer เปนคลาสที่ใชในการสรางออบเจกตที่เปนสตรีมในการสงชนิดขอมูลแบบ char 11.1.2 คลาสประเภท Byte Stream

ประกอบไปดวยคลาสพื้นฐานในการจัดการอินพุตและเอาตพุต คือ InputStream และ OutputStream คลาสทั้งสองเปนคลาสแบบ abstract class ซึ่งไมสามารถสรางออบเจกตได แตคลาสทั้งสองจะมี subclass ซึ่งจะ ใชในการสรางออบเจกต สําหรับการรับสงขอมูลแบบ byte เชน FileInputStream และ FileOutputStream เปน คลาสที่ใชในการสรางออบเจกตสําหรับตนทางปลายทางที่เปนไฟล

[email protected]

1/12

Stream I/O

Modern Programming Languages FileInputStream ObjectInputStream PipedInputStream DataInputStream SequenceInputStream

InputStram

PushbackInputStream FilterInputStream BufferedInputStream StringBufferInputStream LineNumberInputStream ByteArrayInputStream

รูปที่ 11.1 คลาสประเภท InputSream FileOutputStream ObjectOutputStream OutputStram

PipedOutputStream

DataOtuputStream

FilterOutputStream

BufferedOutputStream

ByteArrayOutputStream

PrintStream

รูปที่ 11.2 คลาสประเภท OutputSream คลาส InputStream ใชในการอานขอมูลของสตรีมที่เปนชนิด byte คลาส InputStream จะนําขอมูลจากโหนดตน ทางเขามาในสตรีม และอานขอมูลจากสตรีมโดยมีเมธอดที่ใชสําหรับการอานขอมูลที่เปน byte หรือ อะ เรยของ byte •

o

public abstract int read() throws IOException เปนเมธอดที่ใชในการอานขอมูลจากสตรีมมา 1 ไบตโดยสงคากลับมาเปนขอมูลที่อาน

ไดระหวาง 0 ถึง 255 และจะสงคากลับเปน -1 ถาไมมีขอมูลจากโหนดตนทาง ในเมธอดนี้ จะสงออบเจกตชนิด IOException ในกรณีที่มีขอผิดพลาดเกิดขึ้นจากการอานขอมูล ดังนั้นเมื่อเรียกใชงานเมธอด จะตองมีการดักจับขอผิดพลาดดวยบล็อก try-catch o

public int read(byte b[]) throws IOException

เปนเมธอดที่ใชในการอานขอมูลจากโหนดตนทางทีละหลายไบต โดยทําการอา น ขอมูลครั้งละไมเกินจํานวนของสมาชิกของอะเรยชนิด byte ที่ชื่อ b โดยเมธอดนี้จะสง จํานวนไบตที่อานไดกลับมา และจะสงคากลับเปน -1 ถาไมมีขอมูลจากโหนดตนทาง ใน เมธอดนี้จะสงออบเจกตชนิด IOException ในกรณีที่มีขอผิดพลาดเกิดขึ้นจากการอาน ขอมูล ดังนั้นเมื่อเรียกใชงานเมธอด จะตองมีการดักจับขอผิดพลาดดวยบล็อก try-catch

[email protected]

2/12

Stream I/O

Modern Programming Languages

ตัวอยาง การรับคาเขาจากคียบอรด

ผลลัพธที่ได • เมื่อรันโปรแกรม จะรอรับคาเขาจากคียบอรด :



เมื่อพิมพขอความจะนําคามาเก็บไวในสตรีมเปนชนิด byte :



แสดงขอความ โดยการสรางออบเจกต String แลวสงคา b เขาไปเปนคาเริ่มตน :

คลาส OutputStream ใชในการสงขอมูลลงในสตรีมที่เปนชนิด byte คลาส OutputStream จะมีเมธอดที่ใชสําหรับ การสงขอมูลที่เปน byte หรือ อะเรยของ byte



o

public abstract void write(int b) throws IOException

เปนเมธอดที่ใชในการเขียนสงขอมูลของสตรีมที่เปนชนิด byte โดยเขียนขอมูลเพียง 8 บิตสุดทายของขอมูล ในเมธอดนี้จะสงออบเจกตชนิด IOException ในกรณีที่มี ขอผิดพลาดเกิดขึ้นจากการอานขอมูล ดังนั้นเมื่อเรียกใชงานเมธอด จะตองมีการดักจับ ขอผิดพลาดดวยบล็อก try-catch o

public void write(byte b[]) throws IOException

เปนเมธอดที่ใชในการเขียนสงขอมูลของสตรีมที่เปนอะเรยชนิด byte ในกรณีที่มี ขอผิดพลาดเกิดขึ้นจากการอานขอมูล ดังนั้นเมื่อเรียกใชงานเมธอด จะตองมีการดักจับ ขอผิดพลาดดวยบล็อก try-catch นอกจากนี้คลาส ยังมีเมธอดอื่นๆ เชน o

public void close() throws IOException

เปนเมธอดที่ใชในการปดสตรีม o

public void flush() throws IOException

เปนเมธอดที่ใชในกรณีที่สตรีมมีบัฟเฟอรในการเก็บขอมูลไวชั่วคราว ในการเรียกใช เมธอดนี้จะเปนการเขียนขอมูลที่อยูในบัฟเฟอรลงสตรีม [email protected]

3/12

Stream I/O

Modern Programming Languages

ตัวอยาง การอานและเขียนไฟล ประเภท Byte Stream

พิจารณาจากโปรแกรมขางตน • fin.read() ทําการอานไฟล test.txt เพื่อไปเขียนที่ไฟล testCopy.txt ดวยคําสั่ง fout.write(i)

ผลลัพธที่ไดทางหนาจอ

[email protected]

4/12

Stream I/O

11.2

Modern Programming Languages

คลาสประเภท Character Stream

คลาสพื้นฐานในการจัดการอินพุตและเอาตพุต ที่เปนขอมูลแบบ char มีอยู 2 คลาสคือ Reader และ Writer คลาสทั้งสองเปนคลาสแบบ abstract class ซึ่งไมสามารถสรางออบเจกตได แตคลาสทั้งสองจะมี subclass ซึ่งจะใชในการสรางออบเจกต สําหรับการจัดการกับโหนดตนทางและปลายทางในรูปแบบตางๆ BufferedReader

LineNumberReader

CharArrayReader StringReader Reader InputStreamReader

FileReader

PipedReader FilterReader

PushbackReader

รูปที่ 11.3 คลาสประเภท Reader BufferedWriter CharArrayWriter StringWriter InputStreamWriter Writer

FileWriter

PrintWriter PipedWriter FilterWriter

รูปที่ 11.4 คลาสประเภท Writer •



คลาส Reader ใชในการอานขอมูลของสตรีมที่เปนชนิด char คลาส Reader InputStream ทํางานสอดคลองกันแตจะรับขอมูลที่เปนชนิด char

มีเมธอดที่เหมือนกับคลาส

o public abstract int read() throws IOException o public int read(char c[]) throws IOException คลาส Writer

ใชใ นการเขียนข อมูลของสตรีม ที่ เปน ชนิด char คลาส Writer OutputStream ทํางานสอดคลองกันแตจะสงขอมูลที่เปนชนิด char o o

มีเ มธอดที่เ หมื อนกั บ คลาส

public abstract void writer() throws IOException public void writer(char c[]) throws IOException

[email protected]

5/12

Stream I/O

11.3 •

Modern Programming Languages

การเชื่อมตอออบเจกตของคลาส โดยทั่วไปโปรแกรมภาษาจาวาจะใชออบเจกตประเภท Stream มากกวาหนึ่งออบเจกต โดยจะเชื่อมออบ เจกตของ Stream ตางๆเขาดวยกันเพื่อใชในการแปลงชนิดขอมูลประเภทตางๆ byte

int String …

File FileInputStream

DataInputStream

จากรู ป ด า นบน เป น การเชื่ อ มต อ ออบเจกต ค ลาสประเภท FileInputStream เข า กั บ คลาสประเภท DataInputStream โดยออบเจกตของ FileInputStream จะอานขอมูลของไฟลเขามาโดยมีชนิดขอมูลแบบ byte สวนออบเจกตของ DataInputStream จําทําการแปลงขอมูลแบบไบตใหเปนชนิดขอมูลอื่นๆ ทําใหมีเมธอดในการ อานขอมูลมากขึ้น การอานและเขียนไฟลสามารถทําได โดยใชคลาส ดังนี้ • โหนดของสตรี ม ชนิ ดไฟล สํ า หรับ อ า นและเขียนข อ มูล ชนิด byte คือ FileInputStream และ FileOutputStream •

โหนดของสตรีมชนิดไฟล สําหรับอานและเขียนขอมูลชนิด character

คือ FileReader และ

FileWriter

ตารางแสดงเมธอดที่ ใ ช ใ นการแปลงข อ มู ล ของคลาส

DataInputStream

และ คลาส

DataOutputStream

เมธอด DataInputStream boolean readBoolean() byte readByte() char readchar() short readShort() int readInt() long readLong() float readFloat() double readDouble() String readUTF()

[email protected]

เมธอด DataOutputStream void writeBoolean(boolean b) void writeByte(int b) void writeByte(String s) void writeChar(int c) void writeShort(int s) void writeInt(int i) void writeLong(long l) void writeFloat(float f) void writeDouble(double d) void writeUTF(String s)

6/12

Stream I/O

Modern Programming Languages

ตัวอยาง การเชื่อมตอออบเจกตของคลาส FileOutputStream ที่ใชในการเขียนขอมูลลงไฟล โดยเก็บ ชนิดขอมูลเปน byte ดวยออบเจกตของคลาส DataOutputStream

พิจารณาจากโปรแกรมขางตน •

FileOutputStream(String fileName) ใชในการเขียนไฟลที่ตองการ



DataOutputStream(OutputStream out) สรางบัฟเฟอรเก็บขอมูลชนิด byte แลวทําการเขียนลง

ไฟล testWrite.txt

[email protected]

7/12

Stream I/O

Modern Programming Languages

ตัวอยาง การเชื่อมตอออบเจกตของคลาส FileInputStream ที่อานขอมูลเขามาโดยมีชนิดขอมูลเปน byte เขากับออบเจกตของคลาส DataInputStream

พิจารณาจากโปรแกรมขางตน •

FileInputStream(String fileName) ใชในการอานไฟลที่ตองการ



DataInputStream(InputStream in) testWrite.txt

สรางบัฟเฟอรเก็บขอมูลชนิด byte โดยทําการอานจากไฟล

ผลลัพธที่ได

11.4 • •



สรุปคลาสประเภท stream ที่สําคัญ และ DataOutputStream เปนคลาสที่ใชในการแปลงชนิดขอมูลระหวางชนิดขอมูล แบบ byte กับชนิดขอมูลแบบอื่นๆ BufferedInputStream และ BufferedOutputStream เปนคลาสที่มีบัฟเฟอรสําหรับชนิดขอมูล byte อยูภายในเพื่อใหสามารถอานหรือเขียนขอมูลขนาดใหญ ซึ่งจะชวยเพิ่มประสิทธิภาพในการอานหรือ เขียนขอมูล PrintStream เปนคลาสที่ในการเขียนขอความที่เปน String ที่แปลงมาจากชนิดขอมูลแบบ byte ออบ เจกตที่ชื่อ out และ err ที่อยูในคลาสที่ชื่อ System เปนตัวอยางของออบเจกตที่ใชคลาสนี้ DataInputStream

[email protected]

8/12

Stream I/O • •

Modern Programming Languages

และ BufferedWriter เปนคลาสที่มีบัฟเฟอรสําหรับชนิดขอมูลแบบ char เพื่อให สามารถอานหรือเขียนขอมูลใหญได InputStreamReader และ InputStreamWriter เปนคลาสที่ใชในการแปลงชนิดขอมูลระหวาขอมูล แบบ char กับชนิดขอมูลแบบอื่นๆ BufferedReader

ตัวอยาง ไฟล Character Stream

พิจารณาจากโปรแกรมขางตน •

FileReader(String fileName) ใชในการอานไฟลที่ตองการ



BufferedReader(Reader in)

สรางบัฟเฟอรเก็บขอมูลชนิด char โดยทําการอานจาก

ไฟล reader.txt •

FileWriter(String fileName) ใชในการเขียนไฟลที่ตองการ



BufferedWriter(Writer in) สรางบัฟเฟอรเก็บขอมูลชนิด char โดยทําการเขียนลงไฟล writer.txt

ผลลัพธที่ไดทางหนาจอ

[email protected]

9/12

Stream I/O

Modern Programming Languages

FileReader

[email protected]

FileWriter

10/12

Stream I/O

Modern Programming Languages

แบบฝกหัด ใหทําการอานขอมูลจากไฟล testData.txt ซึ่งมีขอมูลดังรูป

1.

โดยทําการแสดงผลออกทางหนาจอดังนี้

2.

โดยทําการแสดงผลออกทางหนาจอดังนี้

3.

ใหทําการเรียงลําดับคําที่ไดในขอ 2. sortData.txt ดังรูป

[email protected]

โดยเรียงลําดับตามพจนานุกรม a-z

แลวเขียนขอมูลลงไฟล

11/12

Stream I/O

[email protected]

Modern Programming Languages

12/12

Related Documents

Chap11
July 2020 12
Chap11
November 2019 34
Chap11
June 2020 16
Solutions Chap11
November 2019 28
072-076-chap11
October 2019 16
Ufa#ed2#sol#chap11
November 2019 15