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

Программирование осуществляется с помощью специальных языков. Каждый обладает ключевыми особенностями, преимуществами, недостатками и нюансами. Основная масса современных ЯП универсальны – могут применяться как для веб-коддинга, так и для игрового софта. Согласно Google, огромным спросом пользуются языки СИ-семейства, Java, а также Python.

Хорошие разработчики должны разбираться не только в ключевых моментах создания ПО, но и в более сложных структурах процесса. В данной статье речь зайдет о таких манипуляциях как сериализация и десериализация объектов. Также будут рассмотрены наглядные примеры софта, объясняющие каждый процесс более подробно и детально.

Основные термины и понятия

Разработка – процесс, требующий определенных общих знаний. В программировании есть общие понятия, о которых необходимо помнить каждому юзеру, желающему создать собственное программное обеспечение:

  1. Алгоритм – инструкции, правила и указания, направленные на решение той или ной задачи.
  2. API – правила, принципы, протоколы и процедуры, направленные на помощь в создании программных приложений. Такой интерфейс способствует упрощению контактирования со сторонними службами и утилитами.
  3. Аргументы – значения, которые передаются в функции или команды.
  4. Ошибка – дефект или непредвиденный крах, приводящий к неисправностям в написанном коде.
  5. Символ – элементарная единица записи (отображения данных), которая выражена одной буквенной или цифирной записи.
  6. Объекты – связанные переменные, константы, а также иные структурные данные. Они будут выбираться и проходить совместную обработку при исполнении приложения.
  7. Объектно-ориентированное программирование – способ написания ПО, в основе которого заложены объекты и данные. Действия и логика присутствуют, но уходят на второй план.
  8. Класс – набор связанных между собой объектов, наделенных одними и теми же свойствами. Предназначается для гибкости программирования.
  9. Константа – неизменное значение. Оно остается одинаковым на протяжении всего цикла приложения.
  10. Тип данных – классификация определенной разновидности типа.
  11. Массив – множество схожих типов данных, подвергшихся предварительной группировке.
  12. Итерация – один проход через определенный набор операций в коде.
  13. Ключевое слово – зарезервированное языком программирования или утилитой слово. Необходимо для выполнения тех или иных задач, реализации команд. Ключевики не могут выступать в виде названий переменных.
  14. Переменная – единица хранения информации в памяти устройства, которая имеет собственное уникальное имя.
  15. Операнд – то, чем можно управлять через операторы.
  16. Оператор – объект, который при помощи операндов управляет другими составляющими кода в заданном выражении.
  17. Указатель – переменная, хранящая в себе адрес места в памяти.

Это – база, без которой невозможно успешно коддить, а также рассматривать сериализации и десериализации. Отыскать подобные определения успешно удастся через Google. Также стоит учесть, что у каждого ЯП есть «специфические» термины, используемые для конкретного способа написания ПО.

Актуальность темы

Сериализация объектов в языках программирования (будут рассмотрены примеры из Java и Python) – механизм, который помогает разрабам создать уникальное ПО, которое умеет «запоминать» собственное состояние.

Пример – это компьютерная игра. Даже на приставках из 90-х были такие операции как «сохранение» и «загрузка». Но не везде. Из-за этого возникали определенности трудности. Особенно если речь заходила не просто об играх, а о «серьезном» программном обеспечении.

Сохранение и загрузка игры в обычном понимании (и, если посмотреть Google) – это продолжение с того места, где клиент закончил в прошлый раз. Для этого будет создана специальная «контрольная точка». Она задействуется при следующей загрузке ПО. Так процесс звучит в «обыденном» смысле.

В программировании ситуация обстоит аналогичным образом. Процесс можно описать следующим образом:

  1. Пользователь работает с утилитой и производит какие-то изменения.
  2. Когда нужно – пытается сохранить состояние программы.
  3. Информацию о приложении требуется как-то записывать, чтобы в будущем можно было произвести восстановление прогресса. Для этого нужны специальные механизмы.

Именно к этим операциям будет обращаться пользователь, когда ему требуется загрузить или выгрузить то или иное состояние контента. Манипуляции способствуют продолжению работы клиента.

Сериализация и десериализация – общее

Сериализация имеющихся объектов – это процесс сохранения состояния объекта в последовательность байт. Механизм, который позволят «записывать» полученный прогресс для будущей выгрузки.

Десериализация – восстановление объектов из байт, сохранение которых было произведено ранее. Процедура выгрузки «зафиксированной» информации пользователем.

В Java и Python любые объекты, согласно Google, проходят через преобразование в байт последовательность. Это важный процесс, без которого существование современного ПО оказалось бы невозможным.

Для чего требуется

Программные коды не могут существовать сами по себе. Они обычно взаимодействуют друг с другом, а также обмениваются данными. Байтовый формат – это удобное и эффективное средство хранение информации в памяти. Он позволяет превращать объекты (пример – класс SaveGame – сохраненная игра) в последовательность байт. Далее – передать их через интернет на другое устройство (компьютер, смартфон, планшет), а после превратить соответствующие bytes в объект Java или Python.

Из вышесказанного следует, что, когда данные сериализованы, ими удобно пользоваться на разных девайсах. Такой подход позволяет машине воспринимать информацию в виде простого для «осознания» устройства способа представления.

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

В Java

Стоит рассмотреть описанные операции на примере двух самых популярных ЯП. Начать лучше с Java, который является более функциональным и универсальным. С его помощью могут быть написаны даже сложные игры и «офисные» приложения.

В Java, согласно Google, сервиализация возможна лишь относительно объектов, которые используют интерфейс Serializable. Он:

  • не служит для определения тех или иных методов;
  • выступает в качестве своеобразного системного указателя;
  • «ссылается» на то, что объект, который его реализовывает, может быть сериализован.

Сериализация в Java – это своеобразное представление информации в байтах ссылками через специальный класс.

Класс ObjectOutputStream

Для того, чтобы сериализуемый набор объектов был «собран» в поток, необходимо применить class Object Output Stream (пишется слитно). Он отвечает за потоковую запись информации.

Чтобы создать подобный объект, согласно Google, требуется использовать такую форму представления в конструкторе: ObjectOutputStream (OutputStream out).

Запись электронных материалов упомянутым классом ведется за счет определенных методов. Они включают в себя следующие вариации:

  • void close() – закрытие потока;
  • void flush() – очистка буфера и сброс содержимого в выходной поток;
  • write(byte[] buf) – запись в поток массив байтов;
  • write (int val) – преобразование один младший байт из val;
  • writeBoolean(int val) – работа с булевым значением;
  • writeByte(int val) – сохранение в поток один младший байт из val;
  • writeChar(int val) – значение типа char, которое представлено целочисленным;
  • writeDouble – значение типа double;
  • writeLong – тип long;
  • writeInt – целочисленный тип данных int;
  • writeShort – запись типа short;
  • writeUTF(String str) – записывает в поток строку, которая идет в кодировке UTF-8;
  • writeObject(Object obj) – запись в поток отдельного объекта.

Согласно Google, все предложенные методы – это информация, с которой допускается провести сериализацию в Java.

Пример

Чтобы лучше понимать соответствующее направление, стоит рассмотреть наглядный пример. Вот файл с кодом, в который хотим сохранить один объект класса Person:

import java.io.*;
 
public class Program {
 
    public static void main(String[] args) {
         
        try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat")))
        {
            Person p = new Person("Sam", 33, 178, true);
            oos.writeObject(p);
        }
        catch(Exception ex){
             
            System.out.println(ex.getMessage());
        } 
    } 
}
class Person implements Serializable{
      
    private String name;
    private int age;
    private double height;
    private boolean married;
      
    Person(String n, int a, double h, boolean m){
          
        name=n;
        age=a;
        height=h;
        married=m;
    }
    String getName() {return name;}
    int getAge(){ return age;}
    double getHeight(){return height;}
    boolean getMarried(){return married;}
}

Он наглядно отражает сериализацию объектов в программировании на примере Джавы. Подобный приложения можно с легкостью обнаружить в Google.

Десериализация

В Джаве есть обратный от упомянутого ранее класс. Это – ObjectInputStream. Он позволяет провести чтение электронных материалов, которые были serialized ранее. Принимает ссылку в имеющемся конструкторе на поток ввода: ObjectInputStream(InputStream in).

А вот методы, которые использует соответствующий класс:

Сериализация в программировании

Из ранее созданного класса, прошедшего serializing, можно извлечь электронные материалы:

Сериализация в программировании

А теперь можно объединить эти файлы (serialization и deserialization) в единый документ и вывести по полям списка объектов:

Сериализация в программировании
Сериализация в программировании
Сериализация в программировании
Сериализация в программировании

Исключение

Изначально при сериализации рассматриваемых объектов в ЯП, согласно Google, будут использоваться все переменные object. Но бывают случаи, когда некоторые поля требуется исключить. Это можно сделать при помощи модификатора.

В соответствующей ситуации предстоит запомнить, что:

  1. Название необходимого модификатора – это transient.
  2. Если взять наглядный пример с Person, можно исключить из него переменные height.
  3. Убрать разрешается несколько элементов. Пример – дополнительно из Person исключим married.
Сериализация в программировании

Выше – сериализация заданных объектов с исключениями. Подобных примеров в Google тоже немало. И все они способны разъяснить процесс serialize даже новичкам.

В Питоне

В случае с Питоном ситуация обстоит несколько иначе. Далее будут приведены примеры со средой разработки IntelJ IDEA со стандартным расширением от JetBrains.

Чтобы успешно проверить сериализацию в Python, необходимо произвести импорт модулей. А еще – создать таблицу информации, с которой будет осуществляться дальнейшая работа.

Сериализация в программировании
Сериализация в программировании

Инструменты Питона

У Питона не one способ реализации рассматриваемой операции. Их несколько:

  • NumPy. Он будет вести запись массива в файл в качестве одномерного. Реализовывается через метод np/ndarray.tolist().
Сериализация в программировании
  • Google также указывает на то, что есть Pandas, который будет использовать похожий интерфейс. Здесь предусмотрен более широкий функционал. Запись – через метод pd.DataFrame.to_csv(), чтение – pd.read_csv().
Сериализация в программировании
  • Согласно Google, можно реализовать поставленную задачу через JSON. Для этого требуются функции load и dump.
Сериализация в программировании
  • Pickle – если верить Google, представлен стандартной библиотекой, похожей на JSON.
Сериализация в программировании

Все это поможет лучше разобраться с соответствующей тематикой. В Google полно разнообразной документации как по Питону, так и по Джаве. И вот один из примеров.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!