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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java NIO AsynchronousFileChannel 비동기 읽 기 및 쓰기 파일이 버 전의 read()방법 은 ByteBuffer 를 첫 번 째 매개 변수 로 합 니 다.AsynchronousFileChannel 에서 읽 은 데 이 터 는 이 ByteBuffer 에 읽 힙 니 다.두 번 째 매...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.