[问题] PipedInputStream 相关疑问

楼主: willy69wu31 (小小吴)   2014-04-23 21:14:51
初次发文在本板,请多指教
====以下前情提要====
先前我有一支 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 会不会造成效能问题?
或任何其他的问题? 有人有相关的经验吗?
第一次发问就问这么少见的东西,希望板友协助。

Links booklink

Contact Us: admin [ a t ] ucptt.com