是否可以使用基于InputStream的ScatteringByteChannel

时间:2012-07-26 16:51:58

标签: java nio

我想将流中的输入数据分成多个缓冲区。我已经探索过NIO频道,但似乎找不到在InputStream上做相当于C的readv()的方法。文件,套接字等似乎都已被覆盖,但不包括流。 ScatteringByteChannel看起来最有希望,但我无法从InputStream设置它。 有没有办法做到这一点?

感谢您的任何提示。

  • 克里斯

1 个答案:

答案 0 :(得分:1)

考虑nio一个相当低级别的接口,而不是高级接口java.io提供的接口。您的高级流可能使用任何实现。只要您一次可以读取一个字节,就可以将其转换为流。 nio类用于批量数据的原始优化操作。要进行优化,他们必须非常了解数据的来源。通用InputStream根本不适合该图像。

因此,虽然您可以将输入流中的数据分散到多个缓冲区中,但是没有针对每个输入流可移植的优化方法。所以你不妨自己实现,因为nio不会提供任何性能提升。

请注意,您引用的readv C接口只接受低级整数文件句柄,而不是stdlib使用的FILE*。前者只能表示原始的无缓冲内核流。后者可能表示任何内容(请参阅fopencookie联机帮助页),但不会提供原始优化访问。