[*]Начиная с байтового массива сжатых данных, передайте его в потоковом режиме и разархивируйте.
[*]Десериализовать его в список объектов
[*]Добавить в список
[*]Сериализовать список
[*]Сжать данные обратно в байтовый массив
Код: Выделить всё
private static readonly RecyclableMemoryStreamManager MemoryStreamManager = new RecyclableMemoryStreamManager();
static async Task Main(string[] args)
{
using (FileStream fileStream = new FileStream("C:\\data.txt", FileMode.Open, FileAccess.Read))
{
var dataList = await DecompressData(fileStream);
dataList.Add(new MyObject { });
using(var stream = MemoryStreamManager.GetStream())
{
await JsonSerializer.SerializeAsync(stream, dataList);
stream.Position = 0;
var b = await CompressData(stream);
}
}
Console.WriteLine("All done");
}
private static async Task DecompressData(Stream data)
{
using (var resultStream = MemoryStreamManager.GetStream())
{
GZipStream gzip = new GZipStream(data, CompressionMode.Decompress);
List recordsList = await JsonSerializer.DeserializeAsync(gzip);
return recordsList;
}
}
private static async Task CompressData(Stream data)
{
byte[] compressedData;
using (var ms = MemoryStreamManager.GetStream())
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress))
{
data.CopyTo(gzip);
compressedData = ms.GetBuffer();
}
}
return compressedData;
}
Data.CopyTo(gzip); также дублируется данные, но в этот момент данные сжимаются, поэтому используется только < 1 МБ
Подробнее здесь: https://stackoverflow.com/questions/792 ... -it-and-co
Мобильная версия