SRo*_*mes 5 java io performance
我的应用程序获取大量大型输入流,并且需要将它们交给需要字节缓冲区的驱动程序。 Java InputStream to ByteBuffer建议先将它们转换为字节数组;然而,这很昂贵,而且确实破坏了使用 NIO 的全部意义。我正在寻找一种方法,让需要 ByteBuffer 的驱动程序可以根据需要从 InputStream 中读取数据。
在我正在处理的情况下,一次消耗整个 InputStream 并将其转换为数组过于昂贵且浪费。
我认为这是不可能的。无论您使用 ByteBuffer 还是只是从 InputStream 读取,最终您都会使用由某人创建的字节数组。现在,当您将字节数组传递给缓冲区时,缓冲区不会初始化新的字节数组,而是重用您实际传递的内容。该片段直接取自 Java 8 源代码,您可以自行查看:
ByteBuffer(int mark, int pos, int lim, int cap, // package-private
274 byte[] hb, int offset)
275 {
276 super(mark, pos, lim, cap);
277 this.hb = hb;
278 this.offset = offset;
279 }
Run Code Online (Sandbox Code Playgroud)
正如您在上面的片段中看到的,ByteBuffer 直接使用字节数组,它不会再次处理它。因此,对于您已读取字节数组的事实,惩罚为 0。您不应该害怕在实践中应用您链接的帖子。不会有任何性能损失。
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |