private static byte[] extractFiles(FileStream fs, ARCFilePart[] parts, Record record) { byte[] data = new byte[record.len_decomp]; // strings[i] is filename // tocs[i] is ToC, references parts // bytes is references by parts //@tocs[i].data = new byte[tocs[i].len_decomp]; int offDecomp = 0; for (int j = 0; j < record.num_parts; j = j + 1) { ARCFilePart part = parts[record.index + j]; if (part.len_comp == part.len_decomp) { // The file part is not compressed byte[] bComp = new byte[part.len_comp]; // fs, offset, dest, 0, len fs.Seek(part.offset, SeekOrigin.Begin); fs.Read(bComp, 0, part.len_comp); for (int k = 0; k < bComp.Length; k = k + 1) { data[k + offDecomp] = bComp[k]; } } else { byte[] bComp = new byte[part.len_comp]; fs.Seek(part.offset, SeekOrigin.Begin); fs.Read(bComp, 0, part.len_comp); byte[] tmp = LZ4.LZ4Codec.Decode(bComp, 0, bComp.Length, part.len_decomp); Array.Copy(tmp, 0, data, offDecomp, part.len_decomp); } offDecomp = offDecomp + part.len_decomp; } return(data); }
private ARCFilePart[] getFileParts(FileStream fs) { ARCFilePart[] parts = new ARCFilePart[header.rec_num]; int offset = header.rec_offset; fs.Seek(offset, SeekOrigin.Begin); for (int i = 0; i < header.rec_num; i = i + 1) { ARCFilePart part = new ARCFilePart(); part.offset = IOHelper.ReadInteger(fs); part.len_comp = IOHelper.ReadInteger(fs); part.len_decomp = IOHelper.ReadInteger(fs); parts[i] = part; } return(parts); }
private ARCFilePart[] getFileParts(byte[] bytes) { ARCFilePart[] parts = new ARCFilePart[header.rec_num]; int offset = header.rec_offset; for (int i = 0; i < header.rec_num; i = i + 1) { ARCFilePart part = new ARCFilePart(); part.offset = IOHelper.GetInt(bytes, offset); offset = offset + 4; part.len_comp = IOHelper.GetInt(bytes, offset); offset = offset + 4; part.len_decomp = IOHelper.GetInt(bytes, offset); offset = offset + 4; parts[i] = part; } return(parts); }