그래서 저는 파일 형식으로 작업하고 있습니다. 파일 형식에는 데이터 덩어리가 들어 있습니다 ... 그래서 내가 가지고있는 것은 "덩어리"에 대한 List의 배열입니다. 그것들은 함수를 통해 클래스에 데이터를 추가 할 때 추가됩니다.리스트 <byte> 및 바이트 배열 복사 중?
이제 파일을 저장할 때 처음에 청크를 '삽입'해야합니다. 이제는 이것이 의미가 없다는 것을 알고 있지만 청크의 데이터 유형에 대한 데이터 오프셋을 계산하기 전에 해당 덩어리 (공백 임)를 추가해야합니다. 그렇지 않으면 데이터 오프셋이 엉망이됩니다. 그 빈 청크를 삽입 한 후 필자는 필요한 데이터를 복사하는 새 바이트 [] 배열을 만든 다음 업데이트 된 바이트 배열로 삽입 한 빈 청크를 "덮어 씁니다".
왜 내가 이것을 삽입해야하는 주된 이유는 다른 데이터의 오프셋이 포함되어 있기 때문에 모든 것이 추가 된 후에 오프셋을 만들어야하기 때문입니다.
기본적으로 내가 가지고있는 것은이 (만 간체)입니다 :
public struct SizeIndexPair {
public int Size;
public int Index;
};
public class Chunks {
private Dictionary<int, SizeIndexPair> reserved;
public List<List<byte> > DataChunks;
...
public void Reserve(int ID, int size, int index) {
SizeIndexPair sip;
sip.Size = size;
sip.Index = index;
reserved.Add(ID, sip);
List<byte> placeHolder = new List<byte>(size);
DataChunks.Insert(index, placeHolder);
}
public void Register(int ID, byte[] data) {
SizeIndexPair sip = reserved[ID];
if (sip.Size != data.Length)
throw new IndexOutOfRangeException();
for (int i = 0; i < data.Length; i++) {
DataChunks[sip.Index][i] = data[i];
}
}
};
(I은 기존의 덩어리에 추가 데이터를 추가해야 할 수도 있기 때문에 여기 내가 사용 목록 (바이트))
나는 이해하고 있기를 바란다.
이 접근법의 문제점은 더 많은 메모리를 먹는 배열을 '두 배로'한다는 것입니다. 게다가 데이터를 복사하는 과정은 내 응용 프로그램을 상당히 느려질 수 있습니다. 특히 파일에 일반적으로 많은 양의 데이터가 포함되어 있기 때문입니다.
더 나은 방법이 있습니까?
쉽게 해결할 수있는 한 가지는 List를 수정하고 배열을 예약/등록하는 대신 포인터를 통해 배열에 직접 액세스 할 수 있습니다. 이것을 할 수있는 방법이 있습니까?
도움 주셔서 감사합니다.
으로 나는 기본적으로 내가 '수정'목록 내가 포인터로 반복 할 수 할 수 있는지 알고 싶어 질문 – BrokenGlass
을 이해하지 않습니다. – Alex