你如何在 java 中编写零拷贝?主要区别是什么



我正在阅读有关如何使用java nio库来利用O/S级别的文件传输/缓冲,这称为"零拷贝"。

那么创建/写入文件的方式有什么区别呢?使用零拷贝有什么缺点吗?

拷贝意味着你的程序不会将数据从内核空间传输到用户空间,依此类推。 这更快不错的文章可以在这里找到:

https://developer.ibm.com/articles/j-zerocopy/

零拷贝是一种技术,其中应用程序不再是将数据从磁盘传输到套接字的"中间人"。使用零复制的应用程序请求内核将数据直接从磁盘文件复制到套接字,而无需通过应用程序,从而提高性能并减少上下文切换。

这完全取决于应用程序将如何处理从磁盘读取的数据。如果它是一个通过读取文件并通过套接字中继文件来提供大量静态内容的 Web 应用程序,那么零拷贝是获得更好性能的方法。但是,如果应用程序在本地使用数据(以某种方式处理数据,然后将其写回,或者在本地显示数据而不保留数据(,则不会使用零副本。

这篇关于零拷贝的 IBM DeveloperWorks 文章很好读。

Java 中文件 I/O 的其他方法是根据您要读取/写入的文件类型使用 Stream 类。这涉及缓冲流和非缓冲流,尽管通常缓冲流承诺更好的性能,因为它们会导致更少的 I/O 寻道周期,从而减少上下文切换。

最新更新