Работа с файлами и сериализованными данными

До этого времени вы, в основном работали с автономными консольными программами. Самое время попробовать начать взимодействовать с файлами. Файлы представляют собой массив байтов, который вам надо как-нибудь открыть, прочитать в вашей программе, изменить и сохранить. Несмотря на то что многие файлы (например изображения) похожи на гигантские нагоромождения данных, если их открыть текстовым редактором, все равно полезно представлять себе файл как одну длинную строку или поток байтов. Ваша программа прочитает эти байты сначала и до конца, выполняя все операции, которые вы опишете.

К счастью для вас, Ruby делает вашу жизнь проще при работе с файлами. С языком идут инструменты, необходимые для чтения длинных потоков байтов в программе и позволяюще работать с ними как с объектами, с которыми вы уже знакомы. Если вы держите в голове что файлы это всего лишь длинный поток слов/символов/байтов, который считывается сверху вних, то все должно быть интуитивно понятно. Если вы хотите делать более детализированные вещи, такие как запись в определенную позицию в файле, вам сначала необходимо выяснить в каком месте файла вы находитесь, так как вы можете быть где-то в середине файла.

Работа с файлами приводит вас к идее сериализации, которая в основном сводится к тому, чтобы преобразовывать любые данные в формат, который хранится как строка. Это может быть полезным, если вы хотите сохранить свои объекты и классы (например, в момент игры) в файл, или если вы желаете передать эти же самые объекты в веб-браузер (пока есть только один вариант передавать информацию через HTTP - как строку).

К счастью, Ruby и тут может вам помочь. Существуют некоторые общепринятые форматы для сериализации данных, и Ruby предоставляет инструменты для работы с ними. С двумя из них вы будете работать очень часто - это YAML и JSON. Вы часто могли видеть, что YAML используется для хранения конфигураций в Ruby on Rails, поскольку он очень легкий и простой. Его легко читать в обычном текстовом редакторе. JSON является вездесущим в сети, и его выбирают для доставки сложных или многоуровневых данных (например объектов) с сайтов в программу с помощью API (например если вы хотите взаимодействовать с Google Maps).

Наконец, файлы и сериализация данных находят свое применение в базах данных - они помогают поддерживать состояние и постоянность данных. Мы кратко рассмотрим несколько основных провайдеров баз данных, которы поддерживает Ruby.

Пункты для размышления

Постарайтесь ответить на предложенные вопросы. После выполнения задания попробуйте ответить на них ещё раз

  • Какие два способа существуют для того, чтобы прочитать файл с жесткого диска в строку или массив в Ruby?
  • Какие три вещи становятся возможными или намного проще с сериализацией?
  • Что такое JSON?
  • Что такое YAML?
  • Как превратить Ruby объект в JSON?
  • Как превратить JSON в Ruby объект?

Ваше задание

  1. Вспомните раздел от Ruby Monk про класс File
  2. Прочтите раздел от Ruby Monk про сериализацию
  3. Прочтите Beginning Ruby главу 4: Developing Your First Ruby Application и пройдите туториал.
  4. Прочтите Beginning Ruby главу 9: Files and Databases. Большинство знаний о базах данных будут пересмотрены после курса Основы веб-разработки, и поначалу вы не будете пользоваться методом connection так часто как какой либо ORM (например ActiveRecord для Rails, который уже содержит много кода написанного для вас), так что спокойно можете пропустить этот пункт, но попытайтесь посмотреть на что способен Ruby.
  5. Прочтите Главу про ввод/вывод файлов бастардской книги о Ruby. Многое оттуда усвоится быстро, так как вы уже прочитали об этом в предыдущих пунктах, но в книге есть несколько самородков.

Дополнительные ресурсы

Этот раздел содержит полезные ссылки на дополнительные материалы. Они не обязательны, так что расценивайте их как нечто полезное, если вы хотите поглубже погрузиться в тему

Поделиться уроком: