Понижение до торнадо 5.1.1 решит эту проблему. Как вы используете pip3
sudo pip3 uninstall tornado
sudo pip3 install tornado==5.1.1
Во-первых, если вам действительно нужно сохранить массив объектов - поместите их в контейнер и сериализовать контейнер, как было сказано ранее.
Теперь, если вы действительно хотите сохранить два сериализованных объекта в одном сцепленном файле:
Я не уверен, что это возможно «из коробки», но вы можете сделайте две вещи.
Используйте или придумайте свой собственный формат файла полу-tar, в котором вы напишете небольшой заголовок в начале (или конце) файла, который описывает содержимое файла (# 'объекты, и размеры).
Напишите код на C #, чтобы самостоятельно определять начало и конец каждого сериализованного объекта. Я не совсем уверен, что это возможно. Здесь - неофициальная документация формата сериализации. Он содержит заголовок, однако нет гарантии, что этот заголовок не появится в файле.
Поместите ваши объекты в объект коллекции и сериализуйте таким образом. Если вам удастся добавить двоичное представление объекта в конец существующего файла, у вас возникнут проблемы с его чтением.
На самом деле, если вы просто откроете поток для записи и поместите указатель в конец потока, вы можете сериализовать другой объект, и он будет добавлен к существующему потоку.
Десериализация также будет читать за объектом, но не дальше.
Очевидно, что если вам нужен произвольный доступ к вашим объектам (десериализация объекта № 17, но не все до него), то вам нужен индекс позиций, где каждый объект запускается, но если вы просто хотите прочитать все объекты с самого начала, вы можете просто сериализовать их друг за другом.
Как насчет этого
Десериализацию содержимого вашего первого файла в объект в памяти, добавление первого объекта в коллекцию (например, List
Это действительно возможно. Приведенный ниже код добавляет объект.
using (var fileStream = new FileStream("C:\file.dat", FileMode.Append))
{
var bFormatter = new BinaryFormatter();
bFormatter.Serialize(fileStream, objectToSerialize);
}
Следующий код десериализует объекты.
var list = new List<ObjectToSerialize>();
using (var fileStream = new FileStream("C:\file.dat", FileMode.Open))
{
var bFormatter = new BinaryFormatter();
while (fileStream.Position != fileStream.Length)
{
list.Add((ObjectToSerialize)bFormatter.Deserialize(fileStream));
}
}
Примечание, чтобы это работало, файл должен содержать только те же объекты.