2012-07-26 53 views
1

我想從多個緩衝區流拆分輸入數據與ScatteringByteChannel。我已經探索NIO頻道,但似乎無法找到一個方法來做到C'S上的InputStream readv()的等價物。文件,套接字等似乎都已被覆蓋,但不是流。 與ScatteringByteChannel看起來最有前途的,但我未能從InputStream設置。 有沒有辦法做到這一點?是否有可能使用基於一個InputStream

感謝您的任何提示。

  • 克里斯

回答

1

考慮nio相當低的級別的接口,相對於高級別接口java.io提供。您的高層次流可能會使用任何實現。只要您可以一次讀取一個字節,就可以將它變成流。 nio類用於批量數據的原始優化操作。要做這種優化,他們必須很好地知道他們的數據來自哪裏。而一般的InputStream根本不適合該圖像。

因此,儘管你可以從多個緩衝器的輸入流分散的數據,沒有優化的方式爲每個輸入流可移植這樣做。所以你可以自己實現這個,因爲nio不會提供任何性能增益。

請注意,您引用的readv C接口只接受低級整數文件句柄,而不是stdlib使用的FILE*。前者只能表示原始未緩衝的內核流。後者可能代表任何東西(見fopencookie手冊頁),但不會提供原始優化的訪問。

相關問題