Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lab2 Tutorial CS340100, 2010. Lab2 Brief Introduction 學習重點 – 如何實作 FilterInputStream, FilterOutputStream – 使用 Java IO (ex: 存取檔案 ) 工作項目 – 實作 EndianTranslationInputStream.

Similar presentations


Presentation on theme: "Lab2 Tutorial CS340100, 2010. Lab2 Brief Introduction 學習重點 – 如何實作 FilterInputStream, FilterOutputStream – 使用 Java IO (ex: 存取檔案 ) 工作項目 – 實作 EndianTranslationInputStream."— Presentation transcript:

1 Lab2 Tutorial CS340100, 2010

2 Lab2 Brief Introduction 學習重點 – 如何實作 FilterInputStream, FilterOutputStream – 使用 Java IO (ex: 存取檔案 ) 工作項目 – 實作 EndianTranslationInputStream class – 實作 EndianTranslationOutputStream class – 實作 writeTo(InputStream in, OutputStream out) – 實作 readFile(String fileName) – 上述 Class 與 method 的使用範例

3 Endian? 16-bit(2-byte) 的數字儲存在記憶體中的方式 – ex: 43981 10 = ABCD 16 Memory Address Data 01 CDAB Memory Address Data 01 ABCD Little-endian Big-endian

4 2-byte Endian Translate Translator ABCD1A2B3C4D 012345 ABCD1A2B3C4D 012345

5 ByteArrayInputStream For Example … ABCD1A2B3C4D 012345 InputStream in = in.read() returns AB in.read() returns CD in.read() returns 1A …

6 EndianTranslationInputStream Endian Translate Filter… ByteArrayInputStream ABCD1A2B3C4D 012345 InputStream in = in.read() returns AB in.read() returns CD in.read() returns … 2B

7 EndianTranslationInputStream public class EndianTranslationInputStream extends FilterInputStream

8 Methods int read() EndianTranslationInputStream InputStream in = int read() in.read() x 2 => Buffer; Buffer( ) return Buffer[1]; EndianTranslationInputStream InputStream in = int read() in.read() x 2 => Buffer; Buffer( ) return Buffer[1]; ByteArrayInputStream ABCD 1A2B3C4D 012345 ABCD

9 Methods int read() – 從自己內部的 InputStream 讀兩個 byte – 交換順序後 return 出去 – 記得 read() 回傳 -1 代表 Stream 結尾

10 int read(byte[] b, int off, int len) – 一次讀 len 個 byte ,並且放到 b[off] … b[len-1] – 回傳總共讀了幾個 byte EndianTranslationInputStream InputStream in = int read(byte[] b, int off, int len) this.read() x len … EndianTranslationInputStream InputStream in = int read(byte[] b, int off, int len) this.read() x len … ByteArrayInputStream 1A2B3C4D 012345 ABCD

11 Trace Source Code java.io.FilterInputStream java.io.FilterOutputStream java.io.BufferedInputStream

12 Endian Translation Class

13 writeTo Method void writeTo(InputStream i, OutputStream o) – 將 InputStream 裡的東西,丟到 OutputStream – 簡單來說 … o.write(i.read()); writeTo 檔案 ByteArray Socket ( 網路 ) … 檔案 ByteArray Socket ( 網路 ) …

14 readFile Method void readFile(String fileName) – InputStream in = – System.out.print(Interger.toHexString(in.read() )); – until in.read() == -1 EndianTranslationInputStream FileInputStream -------- -------- -------- “input.txt”

15 UTF-16BE UTF-16LE UTF-16BE – 一個字用 16-bit 來表示,以 Big-endian 方式儲存 UTF-16LE – 一個字用 16-bit 來表示,以 Big-endian 方式儲存

16 UTF-16BE UTF-16LE “ARX”.getBytes(“UTF-16BE”) “ARX”.getBytes(“UTF-16LE”) 00520058 012345 0041 AR X 00520058 012345 0041 AR X

17 Main method example 1. 由一個字串建立 Byte Array (UTF-16BE) 2. 將這個 ByteArray 轉換 Endian 後存入 ”out.txt” – 利用 writeTo() 3. 直接讀取 ”out.txt” 00520058 012345 0041 00520058 012345 0041

18 Main method example 4. 利用 readFile() 讀取 ”out.txt” 5. 用文字編輯器打開 ”out.txt” – 選擇編碼: UTF-16LE 00520058 012345 0041

19 EndianTranslationInputStream BufferedInputStream Try this … EndianTranslationInputStream ByteArrayInputStream BufferedInputStream EndianTranslationInputStream ByteArrayInputStream

20 Deadline 5/7 23:59 要請大家來跟我們聊聊你 寫的程式 答不出問題作業會扣分

21 Q1: 有規定檔案輸入輸出的編碼嗎? A: No, 只要能展示出你寫的 Filter, writeTo, readFile 正確運作即可 Q2: 萬一 InputStream 是單數個 Byte ? A: 你可以多補一個 byte(0) ,或是丟 Exception Q3: Demo 時會故意用 read(byte[] b, ….) ? A: 我應該不會直接去用,但是我會掛一個 BufferedInputStream 在外面,這樣就會用到該 method

22 Q4: 怎麼讀一個 byte ? A: InputStream in = new ByteArrayInputStream ( “ToyBox”.getBytes(“UTF-16BE”)); System.out.println(in.read()); Q5: 二退期限過了嗎? Yoshi: 5/7 二退 deadline ^_< 讀一個 Byte 由 byte array 建立 input stream


Download ppt "Lab2 Tutorial CS340100, 2010. Lab2 Brief Introduction 學習重點 – 如何實作 FilterInputStream, FilterOutputStream – 使用 Java IO (ex: 存取檔案 ) 工作項目 – 實作 EndianTranslationInputStream."

Similar presentations


Ads by Google