public void Write(Dictionary <string, List <ISuppGeneItem> > geneToEntries) { using (var memStream = new MemoryStream()) using (var memWriter = new ExtendedBinaryWriter(memStream)) using (var writer = new BinaryWriter(_nsaStream)) { _version.Write(memWriter); memWriter.WriteOptAscii(_jsonKey); memWriter.Write(_isArray); memWriter.WriteOpt(_schemaVersion); memWriter.WriteOpt(geneToEntries.Count); foreach ((string geneSymbol, var entries) in geneToEntries) { memWriter.WriteOptAscii(geneSymbol); memWriter.WriteOpt(entries.Count); foreach (ISuppGeneItem geneItem in entries) { memWriter.Write(geneItem.GetJsonString()); } } var uncompressedBytes = memStream.ToArray(); var compressedBytes = new byte[uncompressedBytes.Length + 32]; var compressor = new Zstandard(); var compressSize = compressor.Compress(uncompressedBytes, uncompressedBytes.Length, compressedBytes, compressedBytes.Length); writer.Write(compressedBytes, 0, compressSize); Console.WriteLine("Number of gene entries written:" + geneToEntries.Count); } }
public int Write(IEnumerable <ISuppIntervalItem> siItems) { var sortedItems = siItems.OrderBy(x => x.Chromosome.Index).ThenBy(x => x.Start).ThenBy(x => x.End).ToList(); Console.WriteLine($"Writing {sortedItems.Count} intervals to database..."); _memWriter.WriteOpt(sortedItems.Count); foreach (ISuppIntervalItem item in sortedItems) { _memWriter.WriteOptAscii(item.Chromosome.EnsemblName); _memWriter.WriteOptAscii(item.Chromosome.UcscName); _memWriter.WriteOpt(item.Chromosome.Index); _memWriter.WriteOpt(item.Start); _memWriter.WriteOpt(item.End); _memWriter.Write(item.GetJsonString()); } var uncompressedBytes = _memStream.ToArray(); var compressedBytes = new byte[uncompressedBytes.Length + 32]; var compressor = new Zstandard(); var compressSize = compressor.Compress(uncompressedBytes, uncompressedBytes.Length, compressedBytes, compressedBytes.Length); _writer.Write(compressedBytes, 0, compressSize); _writer.Flush(); return(sortedItems.Count); }
private void WriteCompressed(int lastPosition) { var startLocation = _writer.BaseStream.Position; int compressSize = _zstd.Compress(_scores, lastPosition, _compressedScores, _compressedScores.Length); _writer.Write(_compressedScores, 0, compressSize); _index.Add(_chromIndex, startLocation, compressSize); Array.Clear(_scores, 0, _scores.Length); _memStream.Position = 0;//reset the stream }