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

loy*_*low 7 java file-io zero-copy

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

那么你创建/写入文件的方式有何不同?使用零拷贝有什么缺点吗?

mik*_*iks 8

零拷贝意味着您的程序不会将数据从内核空间传输到用户空间等等.这是更快的好文章可以在这里找到:http://www.ibm.com/developerworks/library/j-zerocopy/

  • 我阅读了本文并了解零拷贝的好处,但作为一名java开发人员,如何在使用transferTo()方法调用时验证(通过调试或监视)数据是否未通过应用程序?你的想法将不胜感激. (4认同)

Nag*_*U M 5

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

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

这个IBM developerWorks文章关于零拷贝是一个很好看的。

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