[問題] PipedInputStream 相關疑問

看板java作者 (小小吳)時間10年前 (2014/04/23 21:14), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/7 (看更多)
初次發文在本板,請多指教 ====以下前情提要==== 先前我有一支 Java 程式可讀類似 csv 格式的文字檔, 以 FileInputStream 將讀到的資料填入物件屬性內,按規則統計後輸出資料到另一檔案。 接著因為資料提供者給的格式有變動,變成 Excel 格式,沒辦法直接讀, 遂找 Apache POI API 來讓 Java 可以讀 Excel 檔。 不過原本讀文字檔的方法不能直接套到 Excel 檔上。 文字檔是 InputStream 讀好交給 Scanner, 再按欄位格式決定用 nextInt()、next() 或 nextDouble(), 但是 Apache POI 的 API 長的跟 Scanner 根本不一樣。 為了方便相容原本讀 csv 的程式,就把 Excel 讀來的資料轉成 csv 格式, 這樣就可以直接餵給原版的程式吃, 所以就用 PipedInputStream 和 PipedOutputStream, Excel 的資料 print 給 PipedOutputStream, 而文字檔本來就是用 InputStream 讀,用 PipedInputStream 接起來也很剛好。 ====接下來是我的問題==== 1. 這類管線型的輸出入類別看起來很好用,可是我發現大多數 Java 專案好像沒在用, 請問有人知道原因嗎? 是因為知名度太低嗎? 我寫 Java 好多年了,看過設計模式的書, 曾經想像過應該要有個 OutputStream 可以轉換成 InputStream 來用的方式, 但也是最近 Google 了才發現這些管線型類別。 2. 我 Google 一些範例,發現全都用 Thread 來處理這兩個相連的管線物件, Oracle 的說明也說如果在同一個執行緒同時操作兩個相連的管線物件, 可能導致死結,那...為什麼會死結? 如果 PipedOutputStream 寫一個位元組, PipedInputStream 讀一個位元組,輪流下來的話理論上可以在同一個執行緒跑完吧? 3. 用 PipedInputStream 和 PipedOutputStream 會不會造成效能問題? 或任何其他的問題? 有人有相關的經驗嗎? 第一次發問就問這麼少見的東西,希望板友協助。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.24.254.149 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1398258894.A.86B.html ※ 編輯: willy69wu31 (163.24.254.149), 04/23/2014 21:17:51
文章代碼(AID): #1JLxpEXh (java)
討論串 (同標題文章)
文章代碼(AID): #1JLxpEXh (java)