Java NIO (7) FileChannel
3263 단어 FileChannel
FileChannel 열기
FileChannel 을 사용 하기 전에 먼저 열 어야 합 니 다.그러나 우 리 는 FileChannel 을 직접 열 수 없습니다. InputStream, OutputStream 또는 RandomAccessFile 을 사용 하여 FileChannel 인 스 턴 스 를 가 져 와 야 합 니 다.다음은 RandomAccessFile 을 통 해 FileChannel 을 여 는 예제 입 니 다.
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();
FileChannel 에서 데이터 읽 기
여러 read () 방법 중 하 나 를 호출 하여 FileChannel 에서 데 이 터 를 읽 습 니 다.예:
ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = inChannel.read(buf);
우선, 버 퍼 를 분배 합 니 다.FileChannel 에서 읽 은 데 이 터 는 Buffer 로 읽 힙 니 다.
그리고 FileChannel. read () 방법 을 호출 합 니 다.이 방법 은 FileChannel 에서 Buffer 로 데 이 터 를 읽 습 니 다.read () 방법 이 되 돌아 오 는 int 값 은 버 퍼 에 읽 힌 바이트 가 얼마나 되 는 지 를 나 타 냅 니 다.- 1 로 돌아 가면 파일 끝 에 있 음 을 표시 합 니 다.
FileChannel 에 데이터 쓰기
FileChannel. write () 방법 으로 FileChannel 에 데 이 터 를 쓰 면 이 방법의 매개 변 수 는 Buffer 입 니 다.예:
String newData = "New String to write to file..." + System.currentTimeMillis();
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while(buf.hasRemaining()) {
channel.write(buf);
}
FileChannel. write () 는 while 순환 에서 호출 됩 니 다.write () 방법 이 한 번 에 FileChannel 에 얼마나 많은 바이트 를 쓸 수 있 는 지 장담 할 수 없 기 때문에 write () 방법 을 중복 호출 해 야 합 니 다. Buffer 에 채널 에 기록 되 지 않 은 바이트 가 없 을 때 까지.
FileChannel 닫 기
FileChannel 을 사용 한 후 닫 아야 합 니 다.예:
channel.close();
FileChannel 의 position 방법
FileChannel 의 특정한 위치 에서 데이터 읽 기/쓰기 작업 이 필요 할 수도 있 습 니 다.fileChannel 의 현재 위 치 를 position () 방법 으로 가 져 올 수 있 습 니 다.
position (long pos) 방법 으로 FileChannel 의 현재 위 치 를 설정 할 수도 있 습 니 다.
여기에 두 가지 예 가 있다.
long pos = channel.position();
channel.position(pos +123);
파일 끝 문자 에 위 치 를 설정 한 후 파일 채널 에서 데 이 터 를 읽 으 려 고 하면 읽 기 방법 은 - 1 - 파일 끝 표지 로 돌아 갑 니 다.
파일 끝 문자 에 위 치 를 설정 한 다음 채널 에 데 이 터 를 쓰 면 파일 은 현재 위치 로 확대 되 어 데 이 터 를 기록 합 니 다.이것 은 디스크 에 있 는 물리 파일 에 기 록 된 데이터 사이 에 공간 이 있 는 '파일 구멍' 을 초래 할 수 있 습 니 다.
FileChannel 의 size 방법
FileChannel 인 스 턴 스 의 size () 방법 은 이 인 스 턴 스 와 연 결 된 파일 의 크기 를 되 돌려 줍 니 다.예:
long fileSize = channel.size();
FileChannel 의 truncate 방법
FileChannel. truncate () 방법 으로 파일 을 캡 처 할 수 있 습 니 다.파일 을 캡 처 할 때 파일 의 길이 뒤에 있 는 부분 이 삭 제 됩 니 다.예:
channel.truncate(1024);
이 예 는 파일 의 앞 1024 바이트 를 캡 처 합 니 다.
FileChannel 의 force 방법
FileChannel. force () 방법 은 채널 에 디스크 에 기록 되 지 않 은 데 이 터 를 디스크 에 강제로 기록 합 니 다.성능 을 고려 하여 운영 체 제 는 데 이 터 를 메모리 에 캐 시 하기 때문에 FileChannel 에 기 록 된 데 이 터 를 디스크 에 즉시 기록 할 것 이 라 고 장담 할 수 없습니다.이 점 을 확보 하려 면 force () 방법 을 사용 해 야 합 니 다.
force () 방법 은 파일 메타 데이터 (권한 정보 등) 를 디스크 에 동시에 쓸 지 여 부 를 가리 키 는 boolean 형식의 인자 가 있 습 니 다.
다음 예 는 파일 데이터 와 메타 데 이 터 를 디스크 에 강제로 기록 합 니 다.
channel.force(true);