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

看板java作者 (小小吳)時間10年前 (2014/12/03 22:36), 10年前編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
以前曾經寫過一支讀檔程式,用來讀取某一用空格分隔的大量資料純文字檔, 首先 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 到底讀多少字元。 請問有人知道這種情況下該怎麼解決比較好嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.212.83 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1417617411.A.BA9.html

12/04 12:09, , 1F
先公布文件格式大概是甚麼樣子~例如固定長度?還是...
12/04 12:09, 1F

12/04 12:33, , 2F
看起來好像是處理二進位的資料, 那header都有規範
12/04 12:33, 2F

12/04 12:34, , 3F
這種東西c是超好寫, 直接struct裝起來就可以用(亂入)
12/04 12:34, 3F
全部都是空格分隔,唯一例外是: header 和 body 之間是兩個 \n 分隔,無空格 header 可能有其他 metadata,長度不固定,不過全都是純文字,所以才用 Scanner 處理 ※ 編輯: willy69wu31 (114.27.100.206), 12/04/2014 22:59:38
文章代碼(AID): #1KVo03kf (java)
文章代碼(AID): #1KVo03kf (java)