2012-07-29 3 views
0

내가 관심있는 데이터가 파일에서 분리되어있는 이진 파일을 읽으려고합니다. 어떤 읽기 패턴이 더 좋습니까?.NET/Windows의 이진 파일에 가장 적합한 파일 스트림 검색 패턴

  1. 리드 (가정 초기 스트림 위치는 바이트 0에있는) = 12288 오프셋 (원점 시크 (= 8192 카운트) 판독 시크 (오프셋 = 20480, 원점 = 전류) (= 8192 카운트) = 현재)
  2. 읽기 (.NET 스트림이 가능하기 때문에

) 기원 = 시작 = 오프셋 (49152을 추구) = 8192 카운트 (읽기) = 28,672 = 오프셋 (추구) = 8192 원을 계산 시작 나를 찾는 패턴을 찾는 SeekOrigin을 SeekOrigin.Begin에서 시작하는 것 또는 SeekOrigin.Current 위치에서 계속 찾는 것이 더 좋습니까?

중요합니까? OS가 계산 자체를 수행하고 나를 결정할 수 있습니까?

답변

1

중요하지 않습니다. SeekOrigin.Current는 절대 위치를 직접 추적하지 않아도되는 편리한 옵션입니다. Windows는 이미 내부적으로이 작업을 수행하므로 Current 오프셋을 Begin 오프셋으로 변환하는 데 문제가 없습니다. 그것은 정말로 필요한 것입니다. OS가 20480을 찾은 다음 12288을 자동으로 탐색 할 수 있다는 것을 어떻게 알았습니까? Windows는 레코드 크기에 대한 개념이 없습니다. 파일은 단지 바이트 스트림이며, 거기에 부과 된 구조는 없습니다.

정확한 순서는 입니다.과 관련이 있습니다. 프로그램은 파일 위치를 순서대로 방문하여 가장 빠르게 실행됩니다. 디스크 플래터에서 데이터를 쓰고 읽는 방법의 부작용은 디스크가 많이 파편화되지 않은 경우 순차적입니다. 파일 시스템 캐시가 활용하는 것이 있다면, 매우 저렴하고 사용 가능성이 높으므로 동일한 디스크 트랙의 데이터를 미리 읽습니다. 순서대로 탐색하면 데이터가 캐시에 존재할 확률이 최대가됩니다. 매우 빠른 메모리 - 메모리 복사 비용 만 지불하면 디스크를 기다릴 필요가 없습니다.

+0

감사합니다. 질문을 수정했습니다. – Paul