2012-03-27 97 views
1

我一直在使用Java 7中的NIO2,並且我認爲AsynchronousFileChannel將有一個transferTo方法,如同步FileChannel兄弟。AsynchronousFileChannel是否有等價於transferTo?

我正在執行本地文件和打開的TCP套接字之間的零拷貝傳輸。我試圖簡單地創建一個FileChannel,並將transferTo與我的AsynchronousSocketChannel作爲最後一個參數,但在看到異步套接字版本不是WritableByteChannel時,Java將不會擁有它。

有了就排除了作爲一個選項,沒有任何人知道解決方法或外部庫,讓我來管字節的AsynchronousSocketChannel(使用用戶空間沒有緩衝區和隱含的)利用DMA的?

回答

1

transferTo()不是異步操作。因此,在異步通道上執行它是沒有意義的。所以沒有提供。

+0

事實上,仍然存在從異步文件通道移動數據 - >異步套接字通道涉及創建一箇中間字節緩衝區,雖然在不同的線程上,但可以用「transferTo」來避免。 transferTo的同步性沒有涉及到它。 [這個討論](http://mail.openjdk.java.net/pipermail/nio-dev/2011-December.txt)表明有普遍的興趣,但沒有具體的時間表。也許我會看看我是否可以自己做點什麼...... – 2012-03-27 23:43:42

+0

@ChrisMowforth還應該注意的是,在Javadoc中被描述爲可能的內核實現並不存在,至少在Windows中,Solars以及我有源代碼訪問的Linux實現。它可以像你自己那樣實現,具有直接字節緩衝區和循環。這也會失去動力。 – EJP 2012-03-28 00:15:10

相關問題