2012-03-27 5 views
1

Java 7에서 NIO2를 사용 해본 적이 있는데 AsynchronousFileChannel은 동기 FileChannel 형제와 같은 transferTo 메서드를 사용한다고 가정합니다.AsynchronousFileChannel에 대해 transferTo와 동일한 기능이 있습니까?

로컬 파일과 열린 TCP 소켓간에 제로 사본 전송을 수행하려고합니다. 나는 단지 FileChannel을 만들고, AsynchronousSocketChannel을 마지막 arg로 사용하여 transferTo을 호출하려고 시도했지만, 비동기 소켓 버전은 WritableByteChannel이 아니기 때문에 Java가 가지지 않습니다.

옵션으로 배제 된 사람은 DMA를 활용하는 AsynchronousSocketChannel 바이트로 파이프를 연결할 수있는 해결 방법이나 외부 라이브러리를 알고 있습니까? (사용자 공간에서 버퍼를 사용하지 않음)

답변

1

transferTo()는 비동기 작업이 아닙니다. 비동기 채널에서이를 수행하는 것은 의미가 없습니다. 그래서 그것은 제공되지 않습니다.

+0

비동기 파일 채널 -> 비동기 소켓 채널에서 데이터를 이동하는 작업은 다른 스레드에서도 'transferTo'로 피할 수있는 중간 바이트 버퍼를 생성하는 것과 관련이 있습니다. transferTo의 동시성이 들어 가지 않습니다. [이 토론] (http://mail.openjdk.java.net/pipermail/nio-dev/2011-December.txt)은 일반적인 관심사는 있지만 구체적인 일정은 없음을 제안합니다. 어쩌면 직접 요리 할 수 ​​있는지 알게 될 것입니다 ... –

+0

@ChrisMowforth Javadoc에서 가능성이 있다고 주장되는 커널 전용 구현은 적어도 Windows에서는 Solars가 존재하지 않습니다 , 리눅스 구현에는 소스 코드 액세스 권한이 있습니다. 이것은 직접 바이트 버퍼와 루프를 사용하여 직접 구현됩니다. 그것은 그것도 제공하는 demotivated 것입니다. – EJP