2013-05-09 3 views
2

어떤 종류의 FileChannel 개체가 FileChannel.open(path) 메서드를 반환합니까?RandomAccessFile 대 FileChannel.open (경로);

다음과 같이 임의 액세스가 허용됩니까?

FileChannel fc = FileChannel.open(path); 

은 기본적으로 내가 따라서, 생성 위-2 객체 사이의 차이가있을 것입니다 알고 fc1fc

싶습니다 : fc1의 차이 다음과 같은 예를 fc가 무엇

RandomAccessFile ra = new RandomAccessFile("RandomIndeed","rw"); 
    FileChannel fc1 = ra.getChannel(); 

미리 감사드립니다. RandomAccessFile 인스턴스가 ra 객체와 동기화이 경우 fc1에,이 생성 된 것 오브젝트의 랜덤 액세스 동작을 수행에서

+0

두 개체 모두 동일한 개체 (sun.nio.ch.FileChannelImpl)가 반환됩니다 (적어도 유닉스 파일 시스템의 경우). – Perception

답변

0

FileChannel 인스턴스를 얻었다. 그 반대로, 명시 적으로 여부를 쓰기 바이트 읽기 또는 , javadoc는 채널의 위치를 ​​변경

에 설명 된 것 볼 수 있습니다 원래 객체의 파일 위치를 변경하며,. 채널 파일을 통해 파일의 길이를 변경하면 원본 객체를 통해 보이는 길이가 변경되고 그 반대의 경우는 입니다. 바이트를 쓰는 방식으로 파일의 내용을 변경하면 원본 객체가 보는 내용이 으로 변경되며 그 반대의 경우도 마찬가지입니다. fc입니다 FileChannel.open()을 사용하여 생성 된 FileChannel 인스턴스가이 동작을하지 않습니다 그러나

. Streams에서 가져온 FileChannel 인스턴스의 경우에도 마찬가지입니다. 파일보기가 동일한 프로그램에서 작성된 오브젝트간에 일관성이 있음을 보증합니다. 희망이 당신을 도울 수 있습니다.

+0

FileChannel은 "임의로"파일을 탐색하는 데 사용되는 SeekableByteChannel을 구현합니다. 어째서? 즉, SeekableByteChannel 인터페이스에 속한 메서드가 fc에 있음을 의미합니다. – Rollerball

+0

@Rollerball, JDK7을 사용하고 있습니까? 죄송합니다 귀하의 질문에 JDK 6 구현을 참조하십시오. FileChannel 7 생각하기 전에 SeekableByteChannel 구현하지 않습니다. –