문제

NIO 기반 네트워크 프로그래밍 (Mina, Netty, Grizzly 등)의 복잡성을 숨기는 몇 가지 고품질 프레임 워크가 있습니다. NIO 기반 파일 시스템 프로그래밍을 단순화하는 유사한 프레임 워크가 있습니까?

예를 들어, 학습 연습 으로서이 (Awesome!) 기사를 기반으로 디스크 백업 맵을 구현하고 싶습니다. http://www.javaworld.com/javaworld/jw-01-1999/jw-01-step.html.

도움이 되었습니까?

해결책

아니요 (하지만 ...)

그러나 그것은 Java의 Nio 때문입니다 필체 채널 그리고 MAPPEDBYTEBUFFER 네트워킹만큼이나 이해하고 사용하기가 거의 복잡하거나 어렵지 않습니다. 선택자 물건 java.nio.

다음은 운동에 적합한 디스크 백업 맵 (Nio-Land에서 '매핑 된 바이트 버퍼'라고 함)을 만드는 예입니다.

File file = new File("/Users/stu/mybigfile.bin");
FileChannel fc = (new FileInputStream(file)).getChannel(); 
MappedByteBuffer buf = fc.map(MapMode.READ_WRITE, 0, file.length());

다른 버퍼와 마찬가지로 버퍼에 액세스 할 수 있습니다 완충기. 데이터는 Java와 기본 OS의 가상 메모리 관리 시스템에 의해 관리되는 디스크와 메모리 사이에서 마술처럼 빠르게 움직입니다. 그래도 당신은 이것에 대한 어느 정도의 통제력이 있습니다. EG : MappedBytebuffer 's .force() ('이 버퍼의 컨텐츠에 대한 변경 사항은 매핑 된 파일이 포함 된 저장 장치에 기록되도록 강요합니다.') 그리고 .load() ('이 버퍼의 내용을 물리적 메모리에로드합니다.') 나는 이것을 개인적으로 필요로하지 않았습니다.

다른 팁

@stu의 의견에 추가합니다. 소켓 연결에는 한 번에 모든 데이터가있는 것은 아니지만 대신 많은 느린 연결을 지원해야 할 수도 있습니다 (열려 있지만 아직 보내지 않은 ESP 연결은 아직 전송되지 않음).

그러나 파일의 경우 모든 데이터는 한 번에 사용할 수 있으며 일반적으로 여러 드라이브 (드문)에서 데이터를로드하는 경우 최대 성능을 얻기 위해 한 번에 몇 개의 파일 만 열면됩니다. 다중 서버 (매우 드문) 또는 여러 네트워크 인터페이스 (드물게) 한 번에 몇 파일에 액세스하면 성능이 향상 될 수 있습니다. 그럼에도 불구하고 복잡성이 높지 않아로드하는 각 파일에 대해 스레드 만 만들 수 있습니다.

파일이 복잡한 유일한 경우는 로그 파일을 읽는 것입니다. 파일이 읽을 때 크기가 커질 수 있기 때문에 복잡합니다. 파일의 끝에 도달하고 나중에 더 많은 데이터를 찾을 수 있습니다. 또한 로그 파일을 회전 할 수 있습니다. 그럼에도 불구하고 이것은 다루기가 그리 어렵지 않으며 상당히 드문 요구 사항입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top