public static string EncodeList(IEnumerable <Covered> data) { if (data == null) { return(null); } var ret = new LinkedList <IEnumerable <byte> >(); foreach (var c in data) { var asBytes = c.Encode(); var length = System.Linq.Enumerable.Count(asBytes); if (length > ushort.MaxValue) { throw new Exception("Giant coverage array, what"); } var len1 = (byte)((length >> 8) & 0xFF); var len2 = (byte)((length >> 0) & 0xFF); ret.AddLast(new[] { len1, len2 }); ret.AddLast(asBytes); } byte[] compressed; using (var mem = new MemoryStream()) { using (var gzip = new System.IO.Compression.GZipStream(mem, System.IO.Compression.CompressionLevel.Optimal)) { foreach (var bytes in ret) { foreach (var @byte in bytes) { gzip.WriteByte(@byte); } } } compressed = mem.ToArray(); } return(Convert.ToBase64String(compressed)); }