>  기사  >  Java  >  JAVA 채널 간 데이터 전송 방식 설명

JAVA 채널 간 데이터 전송 방식 설명

巴扎黑
巴扎黑원래의
2017-06-26 09:21:011450검색

Java NIO에서는 두 채널 중 하나가 FileChannel인 경우 한 채널(역자 주: 채널은 종종 중국어로 채널로 번역됨)에서 다른 채널로 데이터를 직접 전송할 수 있습니다.

transferFrom(): 수동적 수신

FileChannel의 transferFrom() 메서드는 소스 채널에서 FileChannel로 데이터를 전송할 수 있습니다. (번역자 참고: 이 메서드는 JDK 문서에서 주어진 사용 가능한 읽기 바이트 채널에서 바이트를 전송하는 것으로 설명되어 있습니다. 이 채널의 파일).

메소드의 입력 매개변수 위치는 위치에서 대상 파일에 데이터 쓰기가 시작됨을 나타내고, count는 전송된 최대 바이트 수를 나타냅니다. 소스 채널의 남은 공간이 count 바이트 미만인 경우 전송된 바이트 수는 요청된 바이트 수보다 적습니다.
또한 SoketChannel 구현 시 SocketChannel은 현재 준비된 데이터(count 바이트보다 작을 수 있음)만 전송한다는 점에 유의하세요. 따라서 SocketChannel은 요청된 모든 데이터(바이트 수)를 FileChannel로 전송하지 못할 수 있습니다.

transferTo(): ​​​​FileChannel에서 다른 채널로 데이터를 전송하려면

transferTo() 메서드를 적극적으로 보냅니다. 다음은 간단한 예입니다.

메서드를 호출하는 FileChannel 개체가 다르다는 점을 제외하면 다른 모든 것은 동일합니다.
위에서 언급한 SocketChannel 문제는 transferTo() 메서드에도 존재합니다. SocketChannel은 대상 버퍼가 채워질 때까지 계속 데이터를 전송합니다.

예:

@Testpublic void test2() {
        RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
        FileChannel fromChannel = fromFile.getChannel();
        RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
        FileChannel toChannel = toFile.getChannel();long position = 0;long count = fromChannel.size();//从from 读到 本通道;注意socketfrom只会发送已经准备好的,不会发送count个        toChannel.transferFrom(fromChannel,position, count);//将本通道 写到 to;注意sockedfrom会一直发送,直到to被填满        fromChannel.transferTo(position, count, toChannel);
    }

위 내용은 JAVA 채널 간 데이터 전송 방식 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.