AKTUALNOŚCI

nowości, informacje, szkolenia

filechannel 예제

2/08/2019

이 메서드를 호출하면 채널을 읽기 위해만 열어도 I/O 작업이 발생할 수 있습니다. 예를 들어 일부 운영 체제는 파일 메타데이터의 일부로 마지막 액세스 시간을 유지하며, 이 시간은 파일을 읽을 때마다 업데이트됩니다. 실제로 수행되는지 여부는 시스템에 따라 달라지므로 지정되지 않습니다. 이 예제에서는 처음에는 파일이 존재하지 않습니다. 위의 코드 조각에 표시된 대로 이 프로그램에 의해 만들어집니다. ByteBuffer의 할당() 정적 메서드를 사용하여 바이트 버퍼를 만듭니다. 새 버퍼의 위치는 0이 되고, 제한은 용량이 되고 그 요소는 0으로 초기화됩니다. 이 예제에서는 초기 용량이 6으로 설정됩니다. 다음은 파일 채널을 사용하여 파일에서 읽기를 보여 보여주는 예제의 전체 코드입니다. read API 호출의 위치 매개 변수를 0에서 다른 것으로 변경한 경우 효과도 볼 수 있습니다. 예를 들어 문자열 baeldung.com 일곱 번째 문자는 g입니다. 따라서 위치 매개 변수를 7로 변경하면 버퍼에 문자열 g.com 포함됩니다.

이 문서의 예제에서는 ByteBuffer 및 FileChannel 클래스를 사용합니다. ByteBuffer는 java.nio 패키지 및 java.nio.channels 패키지의 FileChannel에 정의됩니다. 파일을 읽고 데이터를 대상으로 이동하려면 파일을 채널을 통해 버퍼로 읽은 다음 데이터가 버퍼에서 대상으로 이동됩니다. 원본에서 파일에 쓰기 위해 원본 데이터가 버퍼로 이동한 다음 채널을 통해 파일에 기록됩니다. 항상 그렇듯이 예제의 소스 코드는 GitHub에서 사용할 수 있습니다. 이 예제에서는 파일 채널을 사용하여 파일을 버퍼로 읽고 버퍼 내용을 인쇄하는 단계를 보여 주며, 버퍼 내용을 인쇄합니다. 이 문서의 예제는 Windows OS 환경에서 컴파일되고 실행됩니다. Java SE 7은 코드를 실행하려면 필요합니다. 쓰기를 위해 열려 있는 파일 채널은 예를 들어 FileOutputStream(파일, 부울) 생성자 호출을 호출하고 두 번째 매개 변수에 대해 true를 전달하여 만든 파일 출력 스트림에서 가져온 경우 부속 모드일 수 있습니다. 이 모드에서 상대 쓰기 작업의 각 호출먼저 파일의 끝에 위치를 진행 한 다음 요청된 데이터를 씁니다. 위치의 발전과 데이터의 쓰기가 단일 원자성 연산에서 수행되는지 여부는 시스템에 따라 다르므로 지정되지 않습니다. 이 문서의 예제 코드는 ByteBuffers에서 텍스트를 인코딩하고 디코딩할 때 명시적 Charset이 지정되지 않은 테스트 사례를 통해 설명됩니다.

ByteBuffer에는 위치() 메서드도 있습니다. 처음에는 0입니다. 첫 번째 읽기 후 값은 6입니다. 버퍼의 flip() 메서드는 상대 get 작업의 새 시퀀스에 대 한 버퍼 준비: 현재 위치 (이 예제, 6)에 제한을 설정 하 고 위치를 0으로 설정 합니다. 이 예제에서는 FileChannel을 통해 파일에서 읽는 방법, FileChannel을 통해 파일에 쓰는 방법, FileChannel에서 파일의 일부를 메모리에 매핑하는 방법, FileChannel을 통해 한 파일에서 다른 파일로 데이터를 전송하는 방법 및 파일 영역을 잠그는 방법을 배웠습니다. 파일 채널에서 볼 수 있습니다. 이것은 자바.nio.channel.FileChannel의 예입니다. 마지막으로 FileChannel을 사용하여 완료되면 닫아야 합니다. 이 예제에서는 리소스를 사용하여 try-with-resources를 사용했습니다. 예외: 예제에서 FileChannel의 open(), close(), 위치() 및 read() 메서드는 IOException을 throw합니다.