2012-02-22 2 views
1

나는 바이너리 파일에 쓰고 싶은 다른 오브젝트 (그리고 objec 타입)을 가지고있다.자바 이진 파일 작업

`개체 타입 1

obj1, obj2 ... 

obj1, obj2... 

개체 유형 2 ....

이진 파일이 아무튼 인 : 우선 나는이 같은 구조 할 파일이 필요합니다 사용자가 읽을 수 있도록 도와 주지만, 전체 파일을 구문 분석하지 않고 유형별로 객체를 검색, 삭제 또는 추가 할 수 있도록 구조를 갖고 싶습니다. 그리고 이것은 내가 어떻게 해야할지 모르는 것입니다. 이것도 가능합니까?

+1

바이너리 파일에서 구조를 이해하고있는 것은 무엇입니까? 하나씩 0과 1이 있습니다. – tester

+0

하나의 파일 만 사용하려는 이유가 있습니까? 왜 객체 당 하나의 파일을 수용 할 수 없습니까? 구조에 의한 – ARRG

+0

은 전체 파일이 아닌 파일의 일부에 액세스 할 수있는 모든 방법을 의미합니다. – MRM

답변

1

각 개체의 위치와 길이를 표시하려면 파일 시작 부분에 머리글을 유지해야합니다 (또는 다른 위치).

헤더의 종류와 레이아웃은 파일을 읽고 쓰는 방법에 따라 크게 달라집니다. 당신이 이름으로 개체를 검색하려는 경우 예를 들어,이

object1 500 1050 
object2 1550 800 
object3 2350 2000 
<some padding to cover 500 bytes> 
<the 1050 bytes of object1><the 800 bytes of object2><the 2000 bytes of object3> 

같은 파일 무언가가 그리고 상기 object1 시작 파일 400 오프셋 것을 알고, 1050 바이트의 길이를 가지고 있었다.

저장하려는 개체의 유형이 다른 것 같기 때문에 헤더에 추가 데이터를 추가해야 할 수 있습니다.

는 다음의주의 :

  • 추가, 삭제 또는 파일을 modifiy 때마다, 당신은 헤더 내가 object2 제거하면 (예를 들어 따라 모든 파일에 대해 오프셋에서 업데이트해야합니다, object3에 대한 오프셋은 이제 1550입니다.)
  • 헤더를 데이터와 동일한 파일에 저장하는 경우 오프셋을 계산할 때 헤더의 크기를 고려해야합니다 (이 방법으로 작업이 훨씬 더 어려워집니다. 헤더와 이진 데이터를 분리하여 보관하는 것이 좋습니다)
  • 읽고 헤더 당신이 개체에 액세스 할 때마다 구문 분석해야합니다. 헤더 문제 (YML 또는 XML)을 방지하기위한 표준화 된 형식을 사용하는 것이 좋습니다.

을 나는 어떤 잘 모르는 것 같아요 당신이 이러한 기능을 구현하지만 몇 가지가 있습니다 확신합니다 도움이 될 것입니다 도서관은. 어쩌면 누군가를 제안 할 수있을 것입니다.

-

또 다른 해결책은 (기본적으로 자바에서 지원)을 ZipFile를 같은 것을 사용하고 differenz 또는 ZipEntry로 각 객체를 작성하는 것입니다. 이렇게하면 개체 분리를 직접 관리 할 필요가 없으며 원하는 ZipEntry를 알면 걱정할 필요가 있습니다.

+0

이 지시 사항을 읽으면 각 유형의 객체에 대해 파일을 만드는 것이 더 쉽다는 것을 알고 있습니다. 그래서 파일에 추가 할 수 있으므로 오프셋을 다시 계산하지 않아도됩니다 – MRM

+0

아마 객체 당 파일 , 그리고 객체 유형을 자신의 디렉토리에 그룹화 (또는 이름 접두어 사용)합니다. – ARRG

+0

모든 개체에 대해 하나씩 만드는 것은 매우 많은 수의 파일을 만들어 낼 것입니다. 응용 프로그램이 시작될 때마다 읽어야하고 메모리에로드해야합니다 ... 3 또는 4로 적은 작업이 있습니다 ... – MRM