我想将输入数据从流中拆分到多个缓冲区。我已经探索过 NIO 通道,但似乎无法找到一种方法来在 InputStream 上执行相当于 C 的 readv() 的方法。文件、套接字等似乎都被覆盖了,但没有流。ScatteringByteChannel 看起来最有希望,但我未能从 InputStream 设置它。有没有办法做到这一点?
感谢您的任何提示。
- 克里斯
考虑nio
一个相当低级的接口,而不是提供的高级接口java.io
。您的高级流可能使用任何实现。只要你能一次读取一个字节,你就可以把它变成一个流。nio 类用于批量数据的原始优化操作。为了进行优化,他们必须非常清楚他们的数据来自哪里。一个泛型InputStream
根本不适合该图像。
因此,尽管您可以将输入流中的数据分散到多个缓冲区,但没有优化的方法可以为每个输入流可移植地这样做。因此,您不妨自己实现它,因为nio
不会提供任何性能提升。
请注意,readv
您引用的 C 接口仅接受低级整数文件句柄,而不是FILE*
stdlib 使用的。前者只能表示原始的无缓冲内核流。后者可能表示任何内容(参见fopencookie
手册页),但不会提供原始优化访问。