Форум сайта python.su
0
Не хотел я спрашивать этот вопрос здесь, но пришлось так как нигде не нашёл ответ. Зачем сериализировать данные в файл? Это типо шифрования? Но зачем шифровать то, что каждый может дешифровать. В википедии написано для передачи данных в интернете ( если не ошибаюсь), а что нельзя передать файл с несериализованными данными? Дайте пожалуйста полный ответ.
Офлайн
221
Сериализация - Нет это не шифрование. Да это для передачи данных. Не файлов, а данных, объектов. Но видимо раз у Вас нету понимания, то и задач таких нет.
Офлайн
2
Сериализация и десериализация быстрее и проще (не надо самому изгаляться), чем записывать в файл несериализованные данные.
Офлайн
35
Есть, однако, определение, проясняющее суть:
Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.
Пример.
У вас есть экземляр класса Table, и вы хотите этот экземпляр сохранить в файл, чтобы потом продолжить с ним работу. Как вы сохраните этот экземпляр в файл, чтобы потом загрузить его обратно и превратить снова в экземлпяр класса Table? Вот для этого и нужен процесс сериализации и ему обратный.
Вот небольшой пример, который это иллюстрирует.
# serialization and deserialization example class Table: def __init__(self, w, h): self.width = w self.height = h def serialize_table_and_save(obj, filename='data.dat'): with open(filename, 'w') as f: f.write('{},{}'.format(obj.width, obj.height)) def load_and_deserialize_table(filename='data.dat'): obj = None with open(filename, 'r') as f: try: w, h = f.read().split(',') obj = Table(float(w), float(h)) except: # I know, that isn't good... print('Something goes wrong...') return obj if __name__ == '__main__': print('Lets create an instance of the class Table') new_table = Table(2, 4) print('The instance was created successfully...') print('Lets try to save it to a file') serialize_table_and_save(new_table) print('Created instance of the class Table was saved to a file') print('Lets delete saved instance') del new_table print('There is no instances of the class Table in the global namespace') print('Lets restore one from the file') just_created_table = load_and_deserialize_table() if isinstance(just_created_table, Table): print('Test successfully passed: an instance of the class Table was saved to a file and succuessfully loaded from it.') else: print('Something was wrong during (de)serialization or I/O operations') print('Good bye!')
Офлайн
857
Djo0513Не, это перевод данных в такой вид, который однозначно можно будет восстановить на другом компе или в другой версии питона в то же самое. Когда оно сериализовано, его можно как хранить локально на протяжении любого времени, так и передавать куда-нибудь.
Зачем сериализировать данные в файл? Это типо шифрования?
Отредактировано py.user.next (Март 2, 2017 04:50:03)
Офлайн
0
py.user.next
И только? Как часто используется сериализация-десериализиация в программировании?
Офлайн
568
Djo0513Очень часто. Любые сетевые программы, включая веб используют сериализацию. Вы получаете данные из БД и строите на основании этих данных набор объектов. Далее, вам надо этот набор объектов передать на клиента. Во-первых, как это сделать по сети? Надо превратить объект в набор байтов на одной стороне и затем выполнить обратное преобразование на другой. Во вторых, на клиента вообще нет питона, там браузер и джаваскрипт. Вы должны выбрать формат данных, поддерживаемый как серверной, так и клиентской стороной. Это и есть сериализация - превращение объекта в некий набор бинарных или текстовых данных и воввстановление объекта из этих данных. Да и не сетевым программам не обойтись без сериализации. Предложите какой-нибудь способ организовать сохранение в игре?
И только? Как часто используется сериализация-десериализиация в программировании?
Офлайн
857
Djo0513Когда программа имеет какое-то состояние и его надо быстро сохранить и потом восстановить в точности. Тот же самый режим сна у операционной системы или снимок состояния виртуальной машины. Всё это на диск сохраняется и потом с него восстанавливается обратно.
Как часто используется сериализация-десериализиация в программировании?
Офлайн
72
py.user.nextНе путай человека, тут нет сериализации, просто измененные несохраненные страницы сбрасываются на диск.
Тот же самый режим сна у операционной системы
Офлайн
857
PooHНе, просто это так хочется, чтобы было. Не думаю, что там ограничено одной оперативной памятью всё. Иначе можно было бы бэкапить систему путём сохранения образа оперативной памяти. Да и сериализация описывается функцией и обратной к ней. А функция может быть идемпотентной.
тут нет сериализации, просто измененные несохраненные страницы сбрасываются на диск
Офлайн