TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #2705 496
Serializable, Externalizable и Protocol Buffers: в чём разница?

Все три подхода позволяют представить данные в виде байтов, но отличаются управлением форматом и совместимостью.

Serializable — стандартная сериализация Java
Класс реализует Serializable, а ObjectOutputStream записывает объект и связанные с ним сериализуемые объекты. По умолчанию сохраняются нестатические поля, не помеченные transient; поведение можно настроить.

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

Externalizable — явное управление записью и чтением
Класс реализует writeExternal() и readExternal(). Разработчик определяет, какие данные записать, в каком порядке и как восстановить объект.

Так можно сократить объём данных, но меньший размер и лучшая скорость не гарантированы. Совместимость версий и соответствие логики записи и чтения тоже придётся поддерживать самостоятельно.

Protocol Buffers — обмен данными по схеме
Структура сообщения описывается в .proto:
message User {
int64 id = 1;
string name = 2;
}


Из схемы генерируется код для Java, Go, Python, C# и других языков. Приложения обмениваются сообщениями в компактном бинарном формате.

Подходит для межсервисного взаимодействия, gRPC и систем, где важна совместимость между языками. При изменении схемы нужно соблюдать правила эволюции — например, не переиспользовать номера удалённых полей.

Как запомнить:
• Serializable: Java берёт на себя стандартную запись состояния объекта.
• Externalizable: разработчик управляет записью и восстановлением.
• Protobuf: приложения обмениваются данными по общей схеме.

Важное уточнение: сериализация — общее название процесса, и Protobuf тоже является способом сериализации. Здесь сравниваются именно механизмы Java и отдельный формат обмена данными.

👉 Java Portal
  • 👍 3
More from @java_iibrary
  1. Oct 8, 2026Connection Pool, Thread Pool и Object Pool: в чём разница? Общая идея одна: повторно испол…
  2. Oct 7, 2026Многопоточность в Java: volatile, Atomic и synchronized Все три механизма применяются при…
  3. Oct 7, 2026💡 Spring Boot 4: DevTools больше не запускает сервер LiveReload по умолчанию ✅ Автоматиче…
  4. Oct 6, 2026Виртуальные потоки в Java 21+ хорошо подходят для задач, которые большую часть времени про…
  5. Oct 6, 2026💡 Измеряйте покрытие кода тестами, но не гонитесь за 100%. ✅ Покрытие показывает, какие с…
  6. Oct 5, 2026Prompt Engineering и Context Engineering Prompt Engineering — проектирование инструкций дл…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →