用Java编写SendFile和transferTo

时间:2015-09-16 10:26:02

标签: java linux transfer sendfile zero-copy

我正在使用CentOs内核版本2.6.32.我计划使用NIO进行带或不带transferTo(sendFile)的测试。我的测试是将1GB文件从一个目录复制到另一个目录。但是由于使用transferTo(),我没有发现任何显着的性能提升。请告诉我,如果文件到文件sendFile真的可以在Linux内核中运行,或者只有文件到套接字才有效吗?我是否需要为sendFile启用任何内容?

示例代码:

  private static void doCopyNIO(String inFile, String outFile) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        FileChannel cis = null;
        FileChannel cos = null;

        long len = 0, pos = 0;

        try {
            fis = new FileInputStream(inFile);
            cis = fis.getChannel();
            fos = new FileOutputStream(outFile);
            cos = fos.getChannel();
            len = cis.size();
            /*while (pos < len) {
                pos += cis.transferTo(pos, (1024 * 1024 * 10), cos);    // 10M
            }*/
            cis.transferTo(0, len, cos);
            fos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } 
}

0 个答案:

没有答案