[問題] InputStream「分支」式包裝

作者: willy69wu31 (小小吳)   2014-12-03 22:36:49
以前曾經寫過一支讀檔程式,用來讀取某一用空格分隔的大量資料純文字檔,
首先 FileInputStream,再加 BufferedInputStream,最後 Scanner,code 如下
> // 憑印象寫的,沒去編譯器測過,可能有拼錯
> InputStream in = new FileInputStream("scores.txt");
> in = new BufferedInputStream(in);
> Scanner s = new Scanner(in, "UTF-16LE");
這樣的確可以每次呼叫 s.next(); 都抓一個值,分別存進特定陣列,這沒問題。
但接下來我遇到另一種情形:
有一純文字檔類似 HTTP response,分為 header 和 body,
但結構與 HTTP response 不同,不能用現有函式庫處理。
header 本身有固定編碼,但其中記載 body 的編碼,讀完 header 才知道 body 編碼。
如果將上面的 code 改成...
> // 憑印象寫的,沒去編譯器測過,可能有拼錯
> InputStream in = new FileInputStream("scores.txt");
> in = new BufferedInputStream(in);
> Scanner s1 = new Scanner(in, "UTF-16LE");
> // ...
> // 當 header 經由 s1 讀取完畢,已知編碼為 Encoding bodyEncoding;
> Scanner s2 = new Scanner(in, bodyEncoding);
這時候 s2 讀出來結果根本就不正常,可能是 s1 已經預先 read 掉 in 的很多字元?
曾經想過:重新開啟第二個 FileInputStream 再讀一遍;
可是好像不夠直覺,也無從得知第一個 FileInputStream 到底讀多少字元。
請問有人知道這種情況下該怎麼解決比較好嗎?
作者: swpoker (swpoker)   2014-12-04 12:09:00
先公布文件格式大概是甚麼樣子~例如固定長度?還是...
作者: realmeat (真肉)   2014-12-04 12:33:00
看起來好像是處理二進位的資料, 那header都有規範這種東西c是超好寫, 直接struct裝起來就可以用(亂入)

Links booklink

Contact Us: admin [ a t ] ucptt.com