2012-05-03 4 views
0

내가 바이트 수를 읽는다면 내가 할 것이다 읽기 UINT16 번호 이진 파일

using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) 
{ 
    int size = (int) stream.Length; 
    BinaryReader br = new BinaryReader(stream); 
    float[] test = new byte[size/2]; 
    for (int i = 0; i < size/2; ++i) 
    { 
     test[i] = br.ReadUInt16(); 
    } 
    br.Close(); 
} 

는 빠른 있는가 한 번에 전체 파일을 읽는 방법 또는 속도 차이가 무시할 만합니까?

답변

0

파일이 너무 커서 메모리에 저장할 수없는 경우 모든 바이트를 MemoryStream으로 읽은 다음 해당 스트림에서 Uint16을 읽는 것이 더 빠릅니다. 다음 줄

test = br.ReadBytes(size); 

다른 배열에 test 지점을 만들기 때문에

byte[] test = new byte[size]; 

: 그래서 같이 :

byte[] data; 
int size; 
using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) 
{ 
    size = (int) stream.Length; 
    data = new byte[size]; 
    stream.Read(data, 0, size); 
} 

uint[] uintData = new uint[size/2]; 
using (var memoryStream = new MemoryStream(data)) 
using (var reader = new BinaryReader(memoryStream)) 
    for (int i = 0; i < size/2; i++) 
     uintData[i] = reader.ReadUInt16(); 

// Done. 
+1

정교하게하십시오 :) 측정 부분을 위해 – Smash

0

첫째, 당신은이 선이 필요하지 않습니다. 따라서

byte[] test = br.ReadBytes(size); 

으로 충분합니다.


질문에 대해서는 : BinaryReader.ReadBytes 그냥 루프에서 Stream.Read의를 수행하기 때문에 (당신이 ILSpy 또는 참조 소스 코드를 보면이를 확인할 수), 나는 당신의 코드 예제 사이의 성능 차이가 있다고 가정 것 무시할 만하다. 확실히, 나는 당신이 어떤 측정 할 것을 권하고 싶습니다.

+0

, 나는 그것이 간단하고 빨라질 것이라고 생각했습니다. stackoverflow 전문가에게 물어보십시오 : P – Smash