Java에서 RandomAccessFile을 사용하여 데이터를 관리합니다. 간체 : 파일의 시작 부분에 색인이 있습니다. (실제 데이터를 찾을 수있는 오프셋을 나타내는 데이터 세트 당 8 바이트 길이 값).RandomAccessFile에 데이터 삽입 및 인덱스 업데이트
그래서 지금 내가 원하는 경우 예를 들어 데이터 세트 3의 데이터를 찾을 수 있습니다. 나는 8 바이트 오프셋 (2 * 8)을 읽었다. 색인 생성은 0부터 시작합니다.
데이터 세트 자체는 데이터 세트의 크기를 나타내는 4 바이트와 데이터 세트에 속한 모든 바이트로 구성됩니다.
그래서 항상 전체 파일을 다시 작성하기 때문에 잘 작동합니다.
여기서 중요한 것은 데이터 세트 3이 파일의 첫 번째 항목으로 작성되어 색인이 정렬되었지만 데이터 자체는 작성되지 않았다는 것입니다.
새 데이터 세트를 삽입하면 항상 파일 끝에 추가됩니다. 그러나 하나의 파일 일 수있는 데이터 세트의 수는 제한적입니다. 파일에 100 개의 데이터 세트를 저장할 수 있다면 인덱스에는 항상 100 개의 항목이 있습니다. 데이터 세트의 인덱스에서 읽은 오프셋이 0이면 데이터 세트가 새로운 것으로 파일에 추가됩니다.
부 나를 위해 아직 작동하지 않는 케이스가 하나 있습니다. 내가 데이터 셋을 읽으면. 3 파일에서 및 일부 응용 프로그램에서 데이터를 추가하고 파일을 업데이트하려면 어떻게 해야할지 모르겠다.
길이가 같으면 이전 데이터를 덮어 쓸 수 있습니다. 그러나 새 데이터 세트가 이전 데이터 세트보다 많은 바이트를 가지고 있다면이 데이터 세트 뒤에있는 파일의 모든 데이터를 이동하고 이러한 데이터 세트의 색인을 업데이트해야합니다.
어떻게 할 수 있습니까? 아니면 이러한 데이터 집합을 파일에 저장하는 것을 관리하는 더 좋은 방법이 있습니까?
추신 : 당연히 데이터베이스를 사용하려고 생각했지만 프로젝트에는 적용 할 수 없습니다. 정말 간단한 파일이 필요합니다.
나는 오랫동안 메모리에 데이터를 보관하고 항상 전체 파일을 다시 작성하는 것처럼 보입니다. – Chris
@Chris : 이전 파일을 청크로 새 파일 청크에 복사하여 많은 메모리를 사용하지 않고도 항상 수행 할 수 있습니다. –