JavaTM Platform
Standard Ed. 6

java.nio.channels
클래스 FileChannel

java.lang.Object 
  상위를 확장 java.nio.channels.spi.AbstractInterruptibleChannel 
      상위를 확장 java.nio.channels.FileChannel
모든 구현된 인터페이스:
Closeable , ByteChannel , Channel , GatheringByteChannel , InterruptibleChannel , ReadableByteChannel , ScatteringByteChannel , WritableByteChannel


public abstract class FileChannel
extends AbstractInterruptibleChannel
implements ByteChannel , GatheringByteChannel , ScatteringByteChannel

파일의 읽어들여, 기입해, 매핑, 조작용 채널입니다.

파일 채널은, 파일내에,조회변경 이 가능한 현재의 「위치」를 가지고 있습니다. 파일 자체에는, read/기입과 현재의 사이즈 의 조회가 가능한 가변 길이의 바이트 순서가 포함되어 있습니다. 파일의 사이즈는, 현재의 사이즈를 웃도는 바이트수가 기입해지면(자) 커져,잘라버림 에 의해 작아집니다. 파일에는, 액세스 허가, 컨텐츠 타입, 최종 갱신 시각등의 「메타데이타」도 관련지을 수 있고 있습니다. 이 클래스는, 메타데이타아크세스를 위한 메소드는 정의하지 않습니다.

이 클래스는, 바이트 채널에 대한 일반적인 조작 (읽어들여, 기입해, 클로즈) 외에, 다음과 같은 파일 고유의 조작을 정의합니다.

파일 채널은, 복수의 병행 thread로 안전하게 사용할 수 있습니다. close 메소드는,Channel 인터페이스의 지정 대로, 언제라도 호출할 수가 있습니다. 채널의 위치를 사용하는 조작, 또는 파일 사이즈를 변경할 가능성이 있는 조작은, 1 개(살)씩 실행하게 되어 있습니다. 전의 조작의 진행중에 같은 조작을 새롭게 개시하려고 하면(자), 최초의 조작이 끝날 때까지 새로운 조작은 블록 됩니다. 그 외의 조작, 특히 명시적인 위치를 사용하는 조작은, 전의 조작과 동시 병행으로 실행할 수 있습니다. 동시 동시성 처리를 할지 어떨지는 기초가 되는 구현에 의해 정해지기 (위해)때문에, 미지정입니다.

이 클래스의 인스턴스에 의해 제공된 파일의 뷰는, 같은 프로그램내의 그 외의 인스턴스에 의해 제공된 같은 파일의 뷰와 모순되지 않는 것이 보증되고 있습니다. 그러나, 기초가 되는 operating system의 캐쉬 처리나, 네트워크 파일 시스템 프로토콜에 의한 지연이 원인으로, 이 클래스의 인스턴스에 의해 제공된 뷰와 병행해 실행되고 있는 프로그램으로 인식되는 그 외의 뷰가 모순될 가능성이 없는 것은 아닙니다. 이 문제는, 이러한 프로그램을 기술하고 있는 언어의 차이나, 이것들이 동일 머신으로 실행되고 있는지 어떤지와는 관계없이 발생합니다. 이러한 모순은, 시스템에 의해 생기는 것이기 (위해)때문에 미지정입니다.

이 클래스는, 기존의 파일을 여는 메소드나 새로운 파일을 작성하는 메소드는 정의하지 않습니다. 이러한 메소드는, 장래의 릴리스로 추가될 가능성이 있습니다. 이번의 릴리스로 파일 채널을 취득하고 싶은 경우는, 기존의 FileInputStream ,FileOutputStream ,RandomAccessFile 의 몇개의 객체의 getChannel 메소드를 호출합니다. 이렇게 하는 것으로, 기초에 있는 같은 파일에 접속된 파일 채널이 돌려주어집니다.

파일 채널 상태는, 채널을 돌려준 getChannel 메소드를 가지는 객체 상태와 밀접한 관계에 있습니다. 예를 들어, 채널의 위치를 명시적으로, 혹은 바이트의 read나 기입에 의해 변경하면(자), 발생원의 객체의 파일 위치가 바뀝니다 (역도 마찬가지). 파일 채널로부터 파일의 길이를 변경하면(자), 발생원객체로부터 보았을 때의 길이가 바뀝니다 (역도 마찬가지). 바이트의 기입에 의해 파일의 컨텐츠를 변경하면(자), 원의 객체로부터 보았을 때의 컨텐츠가 바뀝니다 (역도 마찬가지).

이 클래스는, 다양한 점으로써, 「read 가능」, 「기입 가능」, 또는 「read와 기입이 가능」인 인스턴스가 필요한 일을 지정하고 있습니다. FileInputStream 인스턴스의 getChannel 메소드로 취득한 채널은 읽어들여 가능합니다. FileOutputStream 인스턴스의 getChannel 메소드로 취득한 채널은 기입해 가능합니다. 그리고,RandomAccessFile 인스턴스의 getChannel 메소드로 취득한 채널은, 인스턴스가 모드「r」로 작성되었을 경우는 읽어들여 가능, 모드「rw」로 작성되었을 경우는 read와 기입이 가능합니다.

예를 들어,FileOutputStream(File, boolean) 생성자 을 호출해 2 번째의 파라미터에 true 를 건네주는 것에 의해 파일 출력 스트림을 작성했을 경우, 이 스트림로부터 취득한 기입 가능한 파일 채널은, 「추가 모드」가 됩니다. 이 모드로 관련한 기입 조작을 호출하면(자), 우선 위치가 파일의 말미까지 진행됩니다. 그 후, 요구된 데이터가 기입해집니다. 이러한 위치의 이동과 데이터의 기입은, 불가분인 단일의 조작으로서 행해집니다. 이 조작은, 시스템에 의존하고 있기 (위해)때문에 미지정입니다.

도입된 버젼:
1.4
관련 항목:
FileInputStream.getChannel() , FileOutputStream.getChannel() , RandomAccessFile.getChannel()

상자의 클래스의 개요
static class FileChannel.MapMode
          파일 매핑방식의 형태 보증된 열거입니다.
 
생성자 의 개요
protected FileChannel ()
          이 클래스의 새로운 인스턴스를 초기화합니다.
 
메소드의 개요
abstract  void force (boolean metaData)
          이 채널의 파일의 갱신 내용은, 그 기억장치에 강제적으로 기입해집니다.
 FileLock lock ()
          이 채널의 파일상에 배타 락을 설정합니다.
abstract  FileLock lock (long position, long size, boolean shared)
          이 채널의 파일의 지정된 영역을 잠급니다.
abstract  MappedByteBuffer map (FileChannel.MapMode  mode, long position, long size)
          이 채널의 파일의 영역을 직접 메모리에 매핑 합니다.
abstract  long position ()
          이 채널의 파일 위치를 돌려줍니다.
abstract  FileChannel position (long newPosition)
          이 채널의 파일 위치를 설정합니다.
abstract  int read (ByteBuffer  dst)
          이 채널의 바이트 순서를 지정의 버퍼에 읽어들입니다.
 long read (ByteBuffer [] dsts)
          이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.
abstract  long read (ByteBuffer [] dsts, int offset, int length)
          이 채널의 바이트 순서가 지정된 버퍼의 서브 순서에 읽어들입니다.
abstract  int read (ByteBuffer  dst, long position)
          이 채널의 바이트 순서를, 지정된 파일 위치로부터 버퍼에 읽어들입니다.
abstract  long size ()
          이 채널의 파일의 현재의 사이즈를 돌려줍니다.
abstract  long transferFrom (ReadableByteChannel  src, long position, long count)
          지정된 read 가능한 바이트 채널로부터 이 채널의 파일에 바이트를 전송 합니다.
abstract  long transferTo (long position, long count, WritableByteChannel  target)
          이 채널의 파일로부터 지정된 기입 가능한 바이트 채널에 바이트를 전송 합니다.
abstract  FileChannel truncate (long size)
          이 채널의 파일의 말미를 절약해 지정된 사이즈로 합니다.
 FileLock tryLock ()
          이 채널의 파일상에서 배타 락을 획득하려고 합니다.
abstract  FileLock tryLock (long position, long size, boolean shared)
          이 채널의 파일의 지정된 영역에서 락을 획득하려고 합니다.
abstract  int write (ByteBuffer  src)
          이 채널의 바이트 순서를 지정의 버퍼로부터 써냅니다.
 long write (ByteBuffer [] srcs)
          이 채널의 바이트 순서가 지정된 버퍼로부터 써냅니다.
abstract  long write (ByteBuffer [] srcs, int offset, int length)
          이 채널의 바이트 순서가 지정된 버퍼의 서브 순서로부터 써냅니다.
abstract  int write (ByteBuffer  src, long position)
          지정된 버퍼의 바이트 순서를 이 채널의 지정된 파일 위치에 기입합니다.
 
클래스 java.nio.channels.spi. AbstractInterruptibleChannel 로부터 상속된 메소드
begin , close , end , implCloseChannel , isOpen
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 
인터페이스 java.nio.channels. Channel 로부터 상속된 메소드
close , isOpen
 

생성자 의 상세

FileChannel

protected FileChannel()
이 클래스의 새로운 인스턴스를 초기화합니다.

메소드의 상세

read

public abstract int read(ByteBuffer  dst)
                  throws IOException 
이 채널의 바이트 순서를 지정의 버퍼에 읽어들입니다.

바이트의 read는, 이 채널의 현재의 파일 위치로부터 개시됩니다. 그 후, 실제로 읽힌 바이트수에 의해 파일 위치가 갱신됩니다. 그 이외의 경우, 이 메소드는 ReadableByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 ReadableByteChannel 내의 read
파라미터:
dst - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public abstract long read(ByteBuffer [] dsts,
                          int offset,
                          int length)
                   throws IOException 
이 채널의 바이트 순서가 지정된 버퍼의 서브 순서에 읽어들입니다.

바이트의 read는, 이 채널의 현재의 파일 위치로부터 개시됩니다. 그 후, 실제로 읽힌 바이트수에 의해 파일 위치가 갱신됩니다. 그 이외의 경우, 이 메소드는 ScatteringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 ScatteringByteChannel 내의 read
파라미터:
dsts - 바이트의 전송처 버퍼
offset - 최초의 바이트의 전송처가 되는 버퍼 배열내의 오프셋(offset). dsts.length 이하의 부가 아닌 값
length - 액세스 되는 최대 버퍼수. dsts.length - offset 이하의 부가 아닌 값
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public final long read(ByteBuffer [] dsts)
                throws IOException 
이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.

바이트의 read는, 이 채널의 현재의 파일 위치로부터 개시됩니다. 그 후, 실제로 읽힌 바이트수에 의해 파일 위치가 갱신됩니다. 그 이외의 경우, 이 메소드는 ScatteringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 ScatteringByteChannel 내의 read
파라미터:
dsts - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract int write(ByteBuffer  src)
                   throws IOException 
이 채널의 바이트 순서를 지정의 버퍼로부터 써냅니다.

채널이 추가 모드 이외의 경우, 바이트의 서두는, 이 채널의 현재의 파일 위치로부터 개시됩니다. 추가 모드에서는, 최초로, 위치가 파일의 말미까지 진행됩니다. 파일의 사이즈는, 기입해진 바이트수에 맞추어 필요하면 커집니다. 파일 위치는, 실제로 기입해진 바이트수에 의해 갱신됩니다. 그 이외의 점으로써, 이 메소드는 WritableByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 WritableByteChannel 내의 write
파라미터:
src - 바이트의 취득처 버퍼
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract long write(ByteBuffer [] srcs,
                           int offset,
                           int length)
                    throws IOException 
이 채널의 바이트 순서가 지정된 버퍼의 서브 순서로부터 써냅니다.

채널이 추가 모드 이외의 경우, 바이트의 서두는, 이 채널의 현재의 파일 위치로부터 개시됩니다. 추가 모드에서는, 최초로, 위치가 파일의 말미까지 진행됩니다. 파일의 사이즈는, 기입해진 바이트수에 맞추어 필요하면 커집니다. 파일 위치는, 실제로 기입해진 바이트수에 의해 갱신됩니다. 그 이외의 점으로써, 이 메소드는 GatheringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 GatheringByteChannel 내의 write
파라미터:
srcs - 바이트의 취득처 버퍼
offset - 최초의 바이트의 취득처가 되는 버퍼 배열내의 오프셋(offset). srcs.length 이하의 부가 아닌 값
length - 액세스 되는 최대 버퍼수. srcs.length - offset 이하의 부가 아닌 값
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public final long write(ByteBuffer [] srcs)
                 throws IOException 
이 채널의 바이트 순서가 지정된 버퍼로부터 써냅니다.

채널이 추가 모드 이외의 경우, 바이트의 서두는, 이 채널의 현재의 파일 위치로부터 개시됩니다. 추가 모드에서는, 최초로, 위치가 파일의 말미까지 진행됩니다. 파일의 사이즈는, 기입해진 바이트수에 맞추어 필요하면 커집니다. 파일 위치는, 실제로 기입해진 바이트수에 의해 갱신됩니다. 그 이외의 점으로써, 이 메소드는 GatheringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 GatheringByteChannel 내의 write
파라미터:
srcs - 바이트의 취득처 버퍼
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

position

public abstract long position()
                       throws IOException 
이 채널의 파일 위치를 돌려줍니다.

반환값:
이 채널의 파일 위치. 파일의 선두로부터 현재의 위치까지의 바이트수를 나타내는 부가 아닌 정수
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

position

public abstract FileChannel  position(long newPosition)
                              throws IOException 
이 채널의 파일 위치를 설정합니다.

위치의 값을 파일의 현재의 사이즈보다 큰 값으로 설정하는 것은 정당한 처리입니다. 그러나, 이 처리에 의해 파일의 사이즈가 변경되는 것은 아닙니다. 파일의 현재의 사이즈보다 큰 값이 설정되어 있는 위치에서 바이트를 읽어내려고 하면(자), 즉석에서 파일의 마지막이 통지됩니다. 같은 위치에서 바이트를 기입하려고 하면(자), 새로운 바이트에 맞추어 파일의 사이즈가 커집니다. 이전의 파일의 마지막으로부터 새롭게 기입해진 바이트까지의 사이에 존재하는 바이트의 값은 미지정입니다.

파라미터:
newPosition - 새로운 위치. 파일의 선두로부터의 바이트수를 나타내는 부가 아닌 정수
반환값:
이 파일 채널
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IllegalArgumentException - 새로운 위치가 0 보다 작은 값의 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

size

public abstract long size()
                   throws IOException 
이 채널의 파일의 현재의 사이즈를 돌려줍니다.

반환값:
이 채널의 파일의 현재의 사이즈 (바이트 단위)
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

truncate

public abstract FileChannel  truncate(long size)
                              throws IOException 
이 채널의 파일의 말미를 절약해 지정된 사이즈로 합니다.

지정된 사이즈가 현재의 파일 사이즈보다 작은 경우, 파일의 말미를 절약할 수 있어 새로운 파일의 마지막에 들어가지 않는 바이트가 파기됩니다. 지정된 사이즈가 현재의 파일 사이즈와 같은가, 그것보다 큰 경우, 파일 사이즈는 변경되지 않습니다. 어느 쪽의 경우도, 이 채널의 파일 위치가 지정된 사이즈보다 큰 경우, 그 사이즈에 맞추어 파일 사이즈가 변경됩니다.

파라미터:
size - 새로운 사이즈. 부가 아닌 바이트수
반환값:
이 파일 채널
예외:
NonWritableChannelException - 이 채널이 기입해 가능하지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IllegalArgumentException - 새로운 사이즈가 0 보다 작은 값의 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

force

public abstract void force(boolean metaData)
                    throws IOException 
이 채널의 파일의 갱신 내용은, 그 기억장치에 강제적으로 기입해집니다.

이 채널의 파일이 로컬의 기억장치상에 있는 경우, 이 메소드의 반환값으로부터, 이 채널의 작성시 또는 이 메소드의 제일 최근의 호출해 이후의 파일의 변경 내용이 모두 그 디바이스에 기입해지고 있는 것을 알 수 있습니다. 이 방법에 의해, 시스템이 크래쉬 했을 때, 중요한 정보를 손실로부터 보호할 수 있습니다.

한편, 파일이 로컬의 기억장치상에 없는 경우, 기입은 행해지지 않습니다.

metaData 파라미터를 사용해, 이 메소드로 실행해야 하는 입출력 조작의 수를 제한할 수 있습니다. 이 파라미터에 false 를 건네주었을 경우, 기억장치에 기입할 필요가 있는 것은, 파일의 컨텐츠의 갱신 내용 뿐입니다. true 를 건네주었을 경우는, 파일의 컨텐츠와 메타데이타의 갱신 내용을 기입할 필요가 있습니다. 이것에는, 일반적으로 1 개 이상의 입출력 조작이 필요합니다. 이 파라미터에 실효성이 있을지 어떨지는, 기초가 되는 operating system에 의해 정해지기 (위해)때문에, 미지정입니다.

이 메소드를 호출하면(자), 채널이 읽어들여 전용이어도 입출력 조작이 발생합니다. 예를 들어, 파일의 메타데이타로서 최종 액세스 시각을 보존해, 파일의 읽을 여행에 갱신하는 것 같은 operating system도 있습니다. 이 처리가 실제로 행해질지 어떨지는 시스템에 의해 정해지기 (위해)때문에, 미지정입니다.

이 메소드는, 이 클래스에 정의된 메소드에 의해 이 채널의 파일에 더해진 변경을 강제할 뿐입니다. map 메소드 호출에 의해 취득한맵 된 byte 버퍼 의 컨텐츠의 변경에 의해 생기는 변경은, 반드시 강제당하지 않습니다. 맵 된 byte 버퍼의 force 메소드를 호출하면(자), 버퍼 컨텐츠에 대한 변경 내용이 강제적으로 기입해집니다.

파라미터:
metaData - true 의 경우, 이 메소드는, 파일의 컨텐츠 및 메타데이타를 기억 영역에 강제적으로 기입할 필요가 있다. 그 이외의 경우는 컨텐츠의 변경만을 강제적으로 기입한다
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

transferTo

public abstract long transferTo(long position,
                                long count,
                                WritableByteChannel  target)
                         throws IOException 
이 채널의 파일로부터 지정된 기입 가능한 바이트 채널에 바이트를 전송 합니다.

이 채널의 파일의 지정된 position 로부터 최대 count 바이트를 읽어들여, 타겟 채널에 기입하려고 합니다. 이 메소드를 호출해도, 채널의 본래의 성질이나 상태에 의해, 요구된 바이트의 일부가 전송 되지 않는 경우도 있습니다. 이 채널의 파일의 바이트수가, 지정된 position 로부터 시작되는 count 보다 적은 경우나, 타겟 채널이 비블록 모드로, 출력 버퍼내의 빈바이트수가 count 보다 적은 경우, 전송 되는 바이트수는 요구된 바이트수보다 적게 됩니다.

이 메소드는 이 채널의 위치를 변경하지 않습니다. 지정된 위치가 파일의 현재의 사이즈보다 큰 경우, 바이트는 일절 전송 되지 않습니다. 타겟 채널에 위치가 지정되고 있는 경우, 바이트는 그 위치로부터 기입해집니다. 그 후, 기입해진 바이트수에 맞추어 위치가 증가합니다.

이 채널로부터 데이터를 읽어들여 타겟 채널에 기입한다고 하는 단순한 루프보다, 이 메소드 쪽이 쭉 효율적으로 처리할 수 있을 가능성이 있습니다. 많은 operating system는, 파일 시스템 캐쉬로부터 타겟 채널에 바이트를 직접 전송 할 수 있습니다. 이 때, 바이트의 카피는 행해지지 않습니다.

파라미터:
position - 전송이 개시되는 파일내의 위치. 부가 아닌
count - 전송 되는 최대 바이트수. 부가 아닌
target - 타겟 채널
반환값:
실제로 전송 된 바이트수. 제로의 경우도 있다
예외:
IllegalArgumentException - 상기의 파라미터의 전제 조건이 채워지지 않은 경우
NonReadableChannelException - 이 채널이 읽어들여 가능하지 않은 경우
NonWritableChannelException - 타겟 채널이 기입해 가능하지 않은 경우
ClosedChannelException - 이 채널 또는 타겟 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 전송중에, 다른 thread에 의해 몇개의 채널이 클로즈 되었을 경우
ClosedByInterruptException - 전송중에 다른 thread로부터의 인터럽트가 있었기 때문에 양쪽 모두의 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

transferFrom

public abstract long transferFrom(ReadableByteChannel  src,
                                  long position,
                                  long count)
                           throws IOException 
지정된 read 가능한 바이트 채널로부터 이 채널의 파일에 바이트를 전송 합니다.

소스 채널로부터 최대 count 바이트를 읽어들여, 이 채널의 파일의 지정된 position 에 기입하려고 합니다. 이 메소드를 호출해도, 채널의 본래의 성질이나 상태에 의해, 요구된 바이트의 일부가 전송 되지 않는 경우도 있습니다. 소스 채널의 바이트수가 count 보다 적은 경우나, 소스 채널이 비블록 모드로, 입력 버퍼내에 남아 있는 곧바로 이용할 수 있는 빈바이트수가 count 보다 적은 경우, 전송 되는 바이트수는 요구된 바이트수보다 적게 됩니다.

이 메소드는 이 채널의 위치를 변경하지 않습니다. 지정된 위치가 파일의 현재의 사이즈보다 큰 경우, 바이트는 일절 전송 되지 않습니다. 소스 채널에 위치가 지정되고 있는 경우, 바이트는 그 위치로부터 읽어내집니다. 그 후, 읽어내진 바이트수에 맞추어 위치가 증가합니다.

소스 채널로부터 데이터를 읽어들여 이 채널에 기입한다고 하는 단순한 루프보다, 이 메소드 쪽이 쭉 효율적으로 처리할 수 있을 가능성이 있습니다. 많은 operating system는, 소스 채널로부터 파일 시스템 캐쉬에 바이트를 직접 전송 할 수 있습니다. 이 때, 바이트의 카피는 행해지지 않습니다.

파라미터:
src - 소스 채널
position - 전송이 개시되는 파일내의 위치. 부가 아닌
count - 전송 되는 최대 바이트수. 부가 아니다
반환값:
실제로 전송 된 바이트수. 제로의 경우도 있다
예외:
IllegalArgumentException - 상기의 파라미터의 전제 조건이 채워지지 않은 경우
NonReadableChannelException - 소스 채널이 읽어들여 가능하지 않은 경우
NonWritableChannelException - 이 채널이 기입해 가능하지 않은 경우
ClosedChannelException - 이 채널 또는 소스 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 전송중에, 다른 thread에 의해 몇개의 채널이 클로즈 되었을 경우
ClosedByInterruptException - 전송중에 다른 thread로부터의 인터럽트가 있었기 때문에 양쪽 모두의 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public abstract int read(ByteBuffer  dst,
                         long position)
                  throws IOException 
이 채널의 바이트 순서를, 지정된 파일 위치로부터 버퍼에 읽어들입니다.

이 메소드는, 바이트가 채널의 현재 위치는 아니고 지정된 파일 위치로부터 읽어내진다고 하는 점을 제외하면,read(ByteBuffer) 메소드와 같습니다. 이 메소드는 이 채널의 위치를 변경하지 않습니다. 지정된 위치가 파일의 현재의 사이즈보다 큰 경우, 바이트는 일절 읽어내지지 않습니다.

파라미터:
dst - 바이트의 전송처 버퍼
position - 전송이 개시되는 파일 위치. 부가 아니다
반환값:
읽어내지는 바이트수. 제로인가, 지정된 위치가 파일의 현재의 사이즈보다 큰 경우는 -1
예외:
IllegalArgumentException - 위치가 0 보다 작은 값의 경우
NonReadableChannelException - 이 채널이 읽어들여 가능하지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract int write(ByteBuffer  src,
                          long position)
                   throws IOException 
지정된 버퍼의 바이트 순서를 이 채널의 지정된 파일 위치에 기입합니다.

이 메소드는, 바이트가 채널의 현재 위치는 아니고 지정된 파일 위치로부터 기입해진다고 하는 점을 제외하면,write(ByteBuffer) 메소드와 같습니다. 이 메소드는 이 채널의 위치를 변경하지 않습니다. 지정된 위치가 현재의 파일 사이즈보다 큰 경우, 파일 사이즈는 새로운 바이트에 맞추어 커집니다. 이전의 파일의 마지막과 새롭게 기입해진 바이트의 사이의 바이트의 값은 미지정입니다.

파라미터:
src - 바이트의 전송원버퍼
position - 전송이 개시되는 파일 위치. 부가 아니다
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
IllegalArgumentException - 위치가 0 보다 작은 값의 경우
NonWritableChannelException - 이 채널이 기입해 가능하지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

map

public abstract MappedByteBuffer  map(FileChannel.MapMode  mode,
                                     long position,
                                     long size)
                              throws IOException 
이 채널의 파일의 영역을 직접 메모리에 매핑 합니다.

파일의 영역을 메모리에 매핑 하는 처리는, 다음의 3 개의 모드 쳐 어느쪽이든으로 행해집니다.

이 채널은, read 전용의 매핑의 경우는 읽어들여, read/기입의 매핑 또는 비공개 매핑의 경우는 read와 기입의 양쪽 모두가 가능하게 되지 않으면 안됩니다.

이 메소드가 돌려주는맵 된 byte 버퍼 의 위치는 제로, 리밋트와 용량은 size 입니다. 마크는 미정도리가 됩니다. 버퍼와 이 버퍼가 가리키는 매핑은, 버퍼 자체가 가베지 컬렉트될 때까지 유효합니다.

매핑의 결과는, 그 작성에 사용된 파일 채널에는 의존하지 않습니다. 예를 들어, 채널을 클로즈 해도, 매핑의 유효성은 바뀌지 않습니다.

많은 경우, 메모리에 매핑 된 파일의 자세한 것은, 본질적으로 기초가 되는 operating system에 의존하기 위해(때문에), 미지정입니다. 요구된 영역이 이 채널의 파일내에 완전하게는 포함되지 않은 경우, 이 메소드의 동작은 미지정입니다. 기초가 되는 파일의 컨텐츠 또는 사이즈의 어느 쪽이 변경되었는지, 이 프로그램에 의한 변경 또는 다른 프로그램에 의한 변경의 어느 쪽인지, 및, 변경이 버퍼에 전달될지 어떨지는 미지정입니다. 버퍼의 변경이 파일에 전달되는 속도는 미지정입니다.

대부분의 operating system에서는, 파일을 메모리에 매핑 하는 편이, 일반적으로의 read 메소드 또는 write 메소드를 사용해 수십 킬로바이트의 데이터의 읽어들여 또는 기입을 실시하는 것보다도 부하가 커집니다. 성능을 중시한다면, 비교적 큰 파일만을 매핑 하는 것을 추천합니다.

파라미터:
mode - 파일의 매핑을 읽어내 전용 모드로 실시하는 경우는 FileChannel.MapMode 클래스에 정의되고 있는 정수 READ_ONLY , 읽어내/기입 모드로 실시하는 경우는 동클래스에 정의되고 있는 정수 READ_WRITE , 비공개 (copy-on-write) 모드로 실시하는 경우는 동클래스에 정의되고 있는 정수 PRIVATE
position - 파일내의 매핑 된 영역의 개시 위치. 부가 아닌
size - 매핑 되는 영역의 사이즈. 부가 아닌,Integer.MAX_VALUE 이하의 값
예외:
NonReadableChannelException - modeREAD_ONLY 인데, 이 채널이 읽어들여 불가 상태가 되어 있었을 경우
NonWritableChannelException - modeREAD_WRITE 또는 PRIVATE 인데, 채널이 읽어내/기입 불가 상태가 되어 있었을 경우
IllegalArgumentException - 상기의 파라미터의 전제 조건이 채워지지 않은 경우
IOException - 그 외의 입출력 에러가 발생했을 경우
관련 항목:
FileChannel.MapMode , MappedByteBuffer

lock

public abstract FileLock  lock(long position,
                              long size,
                              boolean shared)
                       throws IOException 
이 채널의 파일의 지정된 영역을 잠급니다.

이 메소드의 호출은, 영역이 락 되는지, 이 채널이 클로즈 되는지, thread의 호출해에 인터럽트가 발생할 때까지 블록 됩니다.

이 메소드의 호출중에 이 채널이 다른 thread에 의해 클로즈 되면(자),AsynchronousCloseException 가 throw 됩니다.

락의 획득을 대기중에 thread 호출해에 인터럽트가 발생했을 경우, 인터럽트 상태가 설정되어FileLockInterruptionException 가 throw 됩니다. 이 메소드의 호출시에 호출해 원의 인터럽트 상태가 설정되면(자), 즉시 예외가 throw 됩니다. thread의 인터럽트 상태는 변경되지 않습니다.

position 파라미터와 size 파라미터로 지정된 영역이, 기초에 있는 파일에 포함되어 있거나, 그 파일과 오버랩 하거나 하고 있을 필요는 없습니다. 락 영역의 사이즈는 고정입니다. 초기 상태에서는 파일의 마지막이 락 영역내에 포함되어 있어도, 파일 사이즈가 이 영역에서(보다) 커져 버렸을 경우, 새로운 부분에는 락이 적용되지 않습니다. 파일 전체에 락을 적용할 필요가 있는 것에도 불구하고, 파일 사이즈가 커질 가능성이 있는 경우는, 제로로부터 예측되는 최대 파일 사이즈 이상까지의 영역을 잠급니다. 제로 인수의 lock() 메소드는, 단순하게 사이즈 Long.MAX_VALUE 의 영역을 잠급니다.

공유 락을 지원하지 않는 operating system에서는, 공유 락 요구가 배타 락 요구에 자동적으로 변환됩니다. 새롭게 획득한 락이 공유 락일까 배타 락일까는, 결과적으로 얻을 수 있는 락 객체의 isShared 메소드를 호출하는 것으로 판단할 수 있습니다.

파일 락은 Java 가상 머신 전체를 위해서(때문에) 보관 유지됩니다. 이것들은, 동일 가상 머신내의 복수 thread에 의한 파일에의 액세스를 제어하는데는 적합하지 않습니다.

파라미터:
position - 락 영역이 개시되는 파일 위치. 부가 아닌
size - 락 영역의 사이즈. 부가 아니다. position + size 의 합계도 부가 아닌
shared - 공유 락을 요구하는 경우는 true. 이 경우, 이 채널은 읽기가 (경우에 따라서는 기입도) 가능하지 않으면 안 된다. 배타 락을 요구하는 경우는 false. 이 경우, 이 채널은 기입이 (경우에 따라서는 읽기도) 가능하지 않으면 안 된다
반환값:
신규 획득 락을 나타내는 락 객체
예외:
IllegalArgumentException - 상기의 파라미터의 전제 조건이 채워지지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 이 메소드내에서 thread 호출이 블록 되고 있는 동안에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
FileLockInterruptionException - 호출원thread가, 이 메소드내에서 블록 되고 있는 동안에 인터럽트를 받았을 경우
OverlappingFileLockException - 요구된 영역을 오버랩 하는 락이 이 Java 가상 머신에 벌써 확보되고 있는 경우. 또는, 이 메소드내에서 블록 되고 있는 다른 thread가 오버랩 한 영역을 잠그려 하고 있는 경우
NonReadableChannelException - sharedtrue 이면, 이 채널은 읽어내 불가 상태
NonWritableChannelException - sharedfalse 인 것에도 불구하고, 이 채널이 기입해 불가 상태인 경우
IOException - 그 외의 입출력 에러가 발생했을 경우
관련 항목:
lock() , tryLock() , tryLock(long, long, boolean)

lock

public final FileLock  lock()
                    throws IOException 
이 채널의 파일상에 배타 락을 설정합니다.

이 메소드를 fc.lock() 의 형식에서 호출했을 경우, 다음의 호출과 같은 결과를 얻을 수 있습니다.

fc. lock (0L, Long.MAX_VALUE, false) 

반환값:
신규 획득 락을 나타내는 락 객체
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 이 메소드내에서 thread 호출이 블록 되고 있는 동안에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
FileLockInterruptionException - 호출원thread가, 이 메소드내에서 블록 되고 있는 동안에 인터럽트를 받았을 경우
OverlappingFileLockException - 요구된 영역을 오버랩 하는 락이 이 Java 가상 머신에 벌써 확보되고 있는 경우. 또는, 이 메소드내에서 블록 되고 있는 다른 thread가 같은 파일의 오버랩 한 영역을 잠그려 하고 있는 경우
NonWritableChannelException - 이 채널이 기입해 가능하지 않은 경우
IOException - 그 외의 입출력 에러가 발생했을 경우
관련 항목:
lock(long, long, boolean) , tryLock() , tryLock(long, long, boolean)

tryLock

public abstract FileLock  tryLock(long position,
                                 long size,
                                 boolean shared)
                          throws IOException 
이 채널의 파일의 지정된 영역에서 락을 획득하려고 합니다.

이 메소드는 블록 되지 않습니다. 이 메소드를 호출하면(자), 요구된 영역에서 락을 획득했는지, 락의 획득에 실패했는지를 나타내는 결과가 즉시 돌려주어집니다. 오버랩 한 락이 다른 프로그램에 의해 보관 유지되고 있었기 때문에 락에 실패했을 경우,null 가 돌려주어집니다. 그 외의 원인으로 락에 실패했을 경우는, 적절한 예외가 throw 됩니다.

position 파라미터와 size 파라미터로 지정된 영역이, 기초에 있는 파일에 포함되어 있거나, 그 파일과 오버랩 하거나 하고 있을 필요는 없습니다. 락 영역의 사이즈는 고정입니다. 초기 상태에서는 파일의 마지막이 락 영역내에 포함되어 있어도, 파일 사이즈가 이 영역에서(보다) 커져 버렸을 경우, 새로운 부분에는 락이 적용되지 않습니다. 파일 전체에 락을 적용할 필요가 있는 것에도 불구하고, 파일 사이즈가 커질 가능성이 있는 경우는, 제로로부터 예측되는 최대 파일 사이즈 이상까지의 영역을 잠급니다. 제로 인수의 tryLock() 메소드는, 단순하게 사이즈 Long.MAX_VALUE 의 영역을 잠급니다.

공유 락을 지원하지 않는 operating system에서는, 공유 락 요구가 배타 락 요구에 자동적으로 변환됩니다. 새롭게 획득한 락이 공유 락일까 배타 락일까는, 결과적으로 얻을 수 있는 락 객체의 isShared 메소드를 호출하는 것으로 판단할 수 있습니다.

파일 락은 Java 가상 머신 전체를 위해서(때문에) 보관 유지됩니다. 이것들은, 동일 가상 머신내의 복수 thread에 의한 파일에의 액세스를 제어하는데는 적합하지 않습니다.

파라미터:
position - 락 영역이 개시되는 파일 위치. 부가 아닌
size - 락 영역의 사이즈. 부가 아니다. position + size 의 합계도 부가 아닌
shared - 공유 락을 요구하는 경우는 true, 배타 락을 요구하는 경우는 false
반환값:
신규 획득 락을 나타내는 락 객체. 오버랩 한 락이 다른 프로그램에 의해 확보되고 있었기 때문에 락에 실패했을 경우는 null
예외:
IllegalArgumentException - 상기의 파라미터의 전제 조건이 채워지지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
OverlappingFileLockException - 요구된 영역을 오버랩 하는 락이 이 Java 가상 머신에 벌써 확보되고 있는 경우. 또는, 이 메소드내에서 블록 되고 있는 다른 thread가 같은 파일의 오버랩 한 영역을 잠그려 하고 있는 경우
IOException - 그 외의 입출력 에러가 발생했을 경우
관련 항목:
lock() , lock(long, long, boolean) , tryLock()

tryLock

public final FileLock  tryLock()
                       throws IOException 
이 채널의 파일상에서 배타 락을 획득하려고 합니다.

이 메소드를 fc.trylock() 의 형식에서 호출했을 경우, 다음의 호출과 같은 결과를 얻을 수 있습니다.

fc. tryLock (0L, Long.MAX_VALUE, false) 

반환값:
신규 획득 락을 나타내는 락 객체. 오버랩 한 락이 다른 프로그램에 의해 확보되고 있었기 때문에 락에 실패했을 경우는 null
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
OverlappingFileLockException - 요구된 영역을 오버랩 하는 락이 이 Java 가상 머신에 벌써 확보되고 있는 경우. 또는, 이 메소드내에서 블록 되고 있는 다른 thread가 오버랩 한 영역을 잠그려 하고 있는 경우
IOException - 그 외의 입출력 에러가 발생했을 경우
관련 항목:
lock() , lock(long, long, boolean) , tryLock(long, long, boolean)

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.