diff --git a/libraries-data-io/pom.xml b/libraries-data-io/pom.xml
index 58bfde9aa0..1335ba54d1 100644
--- a/libraries-data-io/pom.xml
+++ b/libraries-data-io/pom.xml
@@ -55,6 +55,46 @@
docx4j
${docx4j.version}
+
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson.version}
+
+
+
+ com.esotericsoftware.yamlbeans
+ yamlbeans
+ ${yamlbeans.version}
+
+
+
+ org.apache.thrift
+ libthrift
+ ${apache-thrift.version}
+
+
+
+ com.google.protobuf
+ protobuf-java
+ ${google-protobuf.version}
+
org.assertj
assertj-core
@@ -73,6 +113,11 @@
3.9.0
3.3.5
2.1
+ 2.8.7
+ 2.12.3
+ 1.15
+ 0.14.2
+ 3.17.3
\ No newline at end of file
diff --git a/libraries-data-io/src/main/java/com/baeldung/serialization/protocols/User.java b/libraries-data-io/src/main/java/com/baeldung/serialization/protocols/User.java
new file mode 100644
index 0000000000..27eadfb5f6
--- /dev/null
+++ b/libraries-data-io/src/main/java/com/baeldung/serialization/protocols/User.java
@@ -0,0 +1,32 @@
+package com.baeldung.serialization.protocols;
+
+import java.io.Serializable;
+
+public class User implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private int id;
+ private String name;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "User [id=" + id + ", name=" + name + "]";
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/main/java/com/baeldung/serialization/protocols/UserProtos.java b/libraries-data-io/src/main/java/com/baeldung/serialization/protocols/UserProtos.java
new file mode 100644
index 0000000000..adefabb7e8
--- /dev/null
+++ b/libraries-data-io/src/main/java/com/baeldung/serialization/protocols/UserProtos.java
@@ -0,0 +1,636 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: user.proto
+
+package com.baeldung.serialization.protocols;
+
+public final class UserProtos {
+ private UserProtos() {
+ }
+
+ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+
+ public interface UserOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:protobuf.User)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * int32 id = 1;
+ * @return The id.
+ */
+ int getId();
+
+ /**
+ * string name = 2;
+ * @return The name.
+ */
+ java.lang.String getName();
+
+ /**
+ * string name = 2;
+ * @return The bytes for name.
+ */
+ com.google.protobuf.ByteString getNameBytes();
+ }
+
+ /**
+ * Protobuf type {@code protobuf.User}
+ */
+ public static final class User extends com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:protobuf.User)
+ UserOrBuilder {
+ private static final long serialVersionUID = 0L;
+
+ // Use User.newBuilder() to construct.
+ private User(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private User() {
+ name_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({ "unused" })
+ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+ return new User();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private User(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 8: {
+
+ id_ = input.readInt32();
+ break;
+ }
+ case 18: {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ name_ = s;
+ break;
+ }
+ default: {
+ if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.baeldung.serialization.protocols.UserProtos.internal_static_protobuf_User_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+ return com.baeldung.serialization.protocols.UserProtos.internal_static_protobuf_User_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.serialization.protocols.UserProtos.User.class,
+ com.baeldung.serialization.protocols.UserProtos.User.Builder.class);
+ }
+
+ public static final int ID_FIELD_NUMBER = 1;
+ private int id_;
+
+ /**
+ * int32 id = 1;
+ * @return The id.
+ */
+ @java.lang.Override
+ public int getId() {
+ return id_;
+ }
+
+ public static final int NAME_FIELD_NUMBER = 2;
+ private volatile java.lang.Object name_;
+
+ /**
+ * string name = 2;
+ * @return The name.
+ */
+ @java.lang.Override
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ }
+ }
+
+ /**
+ * string name = 2;
+ * @return The bytes for name.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1)
+ return true;
+ if (isInitialized == 0)
+ return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ if (id_ != 0) {
+ output.writeInt32(1, id_);
+ }
+ if (!getNameBytes().isEmpty()) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+ }
+ unknownFields.writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1)
+ return size;
+
+ size = 0;
+ if (id_ != 0) {
+ size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, id_);
+ }
+ if (!getNameBytes().isEmpty()) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.baeldung.serialization.protocols.UserProtos.User)) {
+ return super.equals(obj);
+ }
+ com.baeldung.serialization.protocols.UserProtos.User other = (com.baeldung.serialization.protocols.UserProtos.User) obj;
+
+ if (getId() != other.getId())
+ return false;
+ if (!getName().equals(other.getName()))
+ return false;
+ if (!unknownFields.equals(other.unknownFields))
+ return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + ID_FIELD_NUMBER;
+ hash = (53 * hash) + getId();
+ hash = (37 * hash) + NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getName().hashCode();
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(com.baeldung.serialization.protocols.UserProtos.User prototype) {
+ return DEFAULT_INSTANCE.toBuilder()
+ .mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+
+ /**
+ * Protobuf type {@code protobuf.User}
+ */
+ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:protobuf.User)
+ com.baeldung.serialization.protocols.UserProtos.UserOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.baeldung.serialization.protocols.UserProtos.internal_static_protobuf_User_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+ return com.baeldung.serialization.protocols.UserProtos.internal_static_protobuf_User_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.serialization.protocols.UserProtos.User.class,
+ com.baeldung.serialization.protocols.UserProtos.User.Builder.class);
+ }
+
+ // Construct using com.baeldung.serialization.compare.UserProtos.User.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+ }
+ }
+
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ id_ = 0;
+
+ name_ = "";
+
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+ return com.baeldung.serialization.protocols.UserProtos.internal_static_protobuf_User_descriptor;
+ }
+
+ @java.lang.Override
+ public com.baeldung.serialization.protocols.UserProtos.User getDefaultInstanceForType() {
+ return com.baeldung.serialization.protocols.UserProtos.User.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.baeldung.serialization.protocols.UserProtos.User build() {
+ com.baeldung.serialization.protocols.UserProtos.User result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.baeldung.serialization.protocols.UserProtos.User buildPartial() {
+ com.baeldung.serialization.protocols.UserProtos.User result = new com.baeldung.serialization.protocols.UserProtos.User(this);
+ result.id_ = id_;
+ result.name_ = name_;
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+
+ @java.lang.Override
+ public Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.setField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+
+ @java.lang.Override
+ public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+
+ @java.lang.Override
+ public Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+
+ @java.lang.Override
+ public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.baeldung.serialization.protocols.UserProtos.User) {
+ return mergeFrom((com.baeldung.serialization.protocols.UserProtos.User) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.baeldung.serialization.protocols.UserProtos.User other) {
+ if (other == com.baeldung.serialization.protocols.UserProtos.User.getDefaultInstance())
+ return this;
+ if (other.getId() != 0) {
+ setId(other.getId());
+ }
+ if (!other.getName()
+ .isEmpty()) {
+ name_ = other.name_;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+ com.baeldung.serialization.protocols.UserProtos.User parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (com.baeldung.serialization.protocols.UserProtos.User) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private int id_;
+
+ /**
+ * int32 id = 1;
+ * @return The id.
+ */
+ @java.lang.Override
+ public int getId() {
+ return id_;
+ }
+
+ /**
+ * int32 id = 1;
+ * @param value The id to set.
+ * @return This builder for chaining.
+ */
+ public Builder setId(int value) {
+
+ id_ = value;
+ onChanged();
+ return this;
+ }
+
+ /**
+ * int32 id = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearId() {
+
+ id_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object name_ = "";
+
+ /**
+ * string name = 2;
+ * @return The name.
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+
+ /**
+ * string name = 2;
+ * @return The bytes for name.
+ */
+ public com.google.protobuf.ByteString getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ /**
+ * string name = 2;
+ * @param value The name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setName(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ name_ = value;
+ onChanged();
+ return this;
+ }
+
+ /**
+ * string name = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearName() {
+
+ name_ = getDefaultInstance().getName();
+ onChanged();
+ return this;
+ }
+
+ /**
+ * string name = 2;
+ * @param value The bytes for name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setNameBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ name_ = value;
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+ // @@protoc_insertion_point(builder_scope:protobuf.User)
+ }
+
+ // @@protoc_insertion_point(class_scope:protobuf.User)
+ private static final com.baeldung.serialization.protocols.UserProtos.User DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.baeldung.serialization.protocols.UserProtos.User();
+ }
+
+ public static com.baeldung.serialization.protocols.UserProtos.User getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public User parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+ return new User(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.baeldung.serialization.protocols.UserProtos.User getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor internal_static_protobuf_User_descriptor;
+ private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_protobuf_User_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ return descriptor;
+ }
+
+ private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
+ static {
+ java.lang.String[] descriptorData = { "\n\nuser.proto\022\010protobuf\" \n\004User\022\n\n\002id\030\001 \001" + "(\005\022\014\n\004name\030\002 \001(\tB0\n\"com.baeldung.seriali" + "zation.compareB\nUserProtosb\006proto3" };
+ descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {});
+ internal_static_protobuf_User_descriptor = getDescriptor().getMessageTypes()
+ .get(0);
+ internal_static_protobuf_User_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_protobuf_User_descriptor, new java.lang.String[] { "Id", "Name", });
+ }
+ // @@protoc_insertion_point(outer_class_scope)
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/ApacheThriftSerializationUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/ApacheThriftSerializationUnitTest.java
new file mode 100644
index 0000000000..7b6aa0a24b
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/ApacheThriftSerializationUnitTest.java
@@ -0,0 +1,32 @@
+package com.baeldung.serialization.protocols;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.thrift.TException;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.transport.TMemoryBuffer;
+import org.junit.jupiter.api.Test;
+
+public class ApacheThriftSerializationUnitTest {
+
+ @Test
+ public void whenUsingThriftForSerialization_ThenDataIsSameAfterDeserialization() throws TException {
+
+ User user = new User();
+ user.setId(2);
+ user.setName("Greg");
+
+ TMemoryBuffer trans = new TMemoryBuffer(4096);
+ TProtocol proto = new TBinaryProtocol(trans);
+
+ proto.writeI32(user.getId());
+ proto.writeString(user.getName());
+
+ int userId = proto.readI32();
+ String userName = proto.readString();
+
+ assertEquals(2, userId);
+ assertEquals("Greg", userName);
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/GoogleProtocolBufferUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/GoogleProtocolBufferUnitTest.java
new file mode 100644
index 0000000000..46d66049d4
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/GoogleProtocolBufferUnitTest.java
@@ -0,0 +1,27 @@
+package com.baeldung.serialization.protocols;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.junit.jupiter.api.Test;
+
+public class GoogleProtocolBufferUnitTest {
+
+ @Test
+ public void whenUsingProtocolBuffersSerialization_ThenObjectIsTheSameAfterDeserialization() throws IOException {
+
+ String filePath = "src/test/resources/protocols/usersproto";
+
+ UserProtos.User user = UserProtos.User.newBuilder().setId(1234).setName("John Doe").build();
+ FileOutputStream fos = new FileOutputStream(filePath);
+ user.writeTo(fos);
+
+ UserProtos.User deserializedUser = UserProtos.User.newBuilder().mergeFrom(new FileInputStream(filePath)).build();
+
+ assertEquals(1234, deserializedUser.getId());
+ assertEquals("John Doe", deserializedUser.getName());
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/GsonSerializationUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/GsonSerializationUnitTest.java
new file mode 100644
index 0000000000..513dcf6ce0
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/GsonSerializationUnitTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.serialization.protocols;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+public class GsonSerializationUnitTest {
+
+ @Test
+ public void whenSerializedUsingGson_ThenObjectIsSameAfterDeserialization() {
+
+ User user = new User();
+ user.setId(1);
+ user.setName("Mark");
+
+ String filePath = "src/test/resources/protocols/gson_user.json";
+
+ try (Writer writer = new FileWriter(filePath)) {
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ gson.toJson(user, writer);
+
+ assertTrue(Files.exists(Paths.get(filePath)));
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ User deserializedUser = gson.fromJson(new FileReader(filePath), User.class);
+
+ assertEquals(1, deserializedUser.getId());
+ assertEquals("Mark", deserializedUser.getName());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/JacksonSerializationUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/JacksonSerializationUnitTest.java
new file mode 100644
index 0000000000..4bfb88b290
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/JacksonSerializationUnitTest.java
@@ -0,0 +1,61 @@
+package com.baeldung.serialization.protocols;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JacksonSerializationUnitTest {
+
+ @Test
+ public void whenUsingJacksonAPIForJSONSerialization_thenDeserializeCorrectObject() throws IOException {
+
+ User user = new User();
+ user.setId(1);
+ user.setName("Mark Jonson");
+
+ String filePath = "src/test/resources/protocols/jackson_user.json";
+
+ File file = new File(filePath);
+
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.writeValue(file, user);
+
+ User deserializedUser = mapper.readValue(new File(filePath), User.class);
+
+ assertEquals(1, deserializedUser.getId());
+ assertEquals("Mark Jonson", deserializedUser.getName());
+ }
+
+ public static List populateListOfUsers() {
+ User user1 = new User();
+ user1.setId(1);
+ user1.setName("Mark Jonson");
+
+ User user2 = new User();
+ user2.setId(2);
+ user2.setName("Johny Beth");
+
+ User user3 = new User();
+ user3.setId(3);
+ user3.setName("Eliza Green");
+
+ User user4 = new User();
+ user4.setId(4);
+ user4.setName("Monica Doe");
+
+ List users = new ArrayList<>();
+ users.add(user1);
+ users.add(user2);
+ users.add(user3);
+ users.add(user4);
+
+ return users;
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/JavaNativeSerializationUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/JavaNativeSerializationUnitTest.java
new file mode 100644
index 0000000000..bb4cc0df0e
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/JavaNativeSerializationUnitTest.java
@@ -0,0 +1,38 @@
+package com.baeldung.serialization.protocols;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.junit.jupiter.api.Test;
+
+public class JavaNativeSerializationUnitTest {
+
+ @Test
+ public void whenUsingJavaNativeSerialization_ThenObjectIsTheSameAfterDeserialization() throws IOException, ClassNotFoundException {
+
+ User user = new User();
+ user.setId(1);
+ user.setName("Mark");
+
+ String filePath = "src/test/resources/protocols/user.txt";
+
+ FileOutputStream fileOutputStream = new FileOutputStream(filePath);
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
+ objectOutputStream.writeObject(user);
+ objectOutputStream.flush();
+ objectOutputStream.close();
+
+ FileInputStream fileInputStream = new FileInputStream(filePath);
+ ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
+ User deserializedUser = (User) objectInputStream.readObject();
+ objectInputStream.close();
+
+ assertEquals(1, deserializedUser.getId());
+ assertEquals("Mark", deserializedUser.getName());
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/YAMLSerializationUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/YAMLSerializationUnitTest.java
new file mode 100644
index 0000000000..7ef3f88511
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/serialization/protocols/YAMLSerializationUnitTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.serialization.protocols;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+import com.esotericsoftware.yamlbeans.YamlReader;
+import com.esotericsoftware.yamlbeans.YamlWriter;
+
+public class YAMLSerializationUnitTest {
+
+ @Test
+ public void whenUsingYAMLBeansForSerialization_thenDeserializeCorrectMap() throws IOException {
+
+ String filePath = "src/test/resources/protocols/yamlbeans_user.yaml";
+
+ YamlWriter writer = new YamlWriter(new FileWriter(filePath));
+ writer.write(populateUserMap());
+ writer.close();
+
+ YamlReader reader = new YamlReader(new FileReader(filePath));
+ Object object = reader.read();
+ reader.close();
+
+ assertTrue(object instanceof Map);
+ Map deserializedUsers = (Map) object;
+
+ assertEquals(4, deserializedUsers.size());
+ assertEquals("Mark Jonson", (deserializedUsers.get("User1").getName()));
+ assertEquals(1, (deserializedUsers.get("User1").getId()));
+ }
+
+ private Map populateUserMap() {
+
+ User user1 = new User();
+ user1.setId(1);
+ user1.setName("Mark Jonson");
+
+ User user2 = new User();
+ user2.setId(2);
+ user2.setName("Johny Beth");
+
+ User user3 = new User();
+ user3.setId(3);
+ user3.setName("Eliza Green");
+
+ User user4 = new User();
+ user4.setId(4);
+ user4.setName("Monica Doe");
+
+ Map users = new LinkedHashMap<>();
+ users.put("User1", user1);
+ users.put("User2", user2);
+ users.put("User3", user3);
+ users.put("User4", user4);
+
+ return users;
+ }
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/protocols/gson_user.json b/libraries-data-io/src/test/resources/protocols/gson_user.json
new file mode 100644
index 0000000000..5440a774f7
--- /dev/null
+++ b/libraries-data-io/src/test/resources/protocols/gson_user.json
@@ -0,0 +1,4 @@
+{
+ "id": 1,
+ "name": "Mark"
+}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/protocols/jackson_user.json b/libraries-data-io/src/test/resources/protocols/jackson_user.json
new file mode 100644
index 0000000000..ce10cca7ea
--- /dev/null
+++ b/libraries-data-io/src/test/resources/protocols/jackson_user.json
@@ -0,0 +1 @@
+{"id":1,"name":"Mark Jonson"}
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/protocols/user.proto b/libraries-data-io/src/test/resources/protocols/user.proto
new file mode 100644
index 0000000000..d4a231d6ec
--- /dev/null
+++ b/libraries-data-io/src/test/resources/protocols/user.proto
@@ -0,0 +1,11 @@
+syntax = "proto3";
+
+package protobuf;
+
+option java_package = "com.baeldung.serialization.protocols";
+option java_outer_classname = "UserProtos";
+
+message User {
+ int32 id = 1;
+ string name = 2;
+ }
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/protocols/user.txt b/libraries-data-io/src/test/resources/protocols/user.txt
new file mode 100644
index 0000000000..c9f53bfd49
Binary files /dev/null and b/libraries-data-io/src/test/resources/protocols/user.txt differ
diff --git a/libraries-data-io/src/test/resources/protocols/usersproto b/libraries-data-io/src/test/resources/protocols/usersproto
new file mode 100644
index 0000000000..83dd650be6
--- /dev/null
+++ b/libraries-data-io/src/test/resources/protocols/usersproto
@@ -0,0 +1 @@
+Ò John Doe
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/protocols/yamlbeans_user.yaml b/libraries-data-io/src/test/resources/protocols/yamlbeans_user.yaml
new file mode 100644
index 0000000000..83726897b9
--- /dev/null
+++ b/libraries-data-io/src/test/resources/protocols/yamlbeans_user.yaml
@@ -0,0 +1,13 @@
+!java.util.LinkedHashMap
+User1: !com.baeldung.serialization.protocols.User
+ id: 1
+ name: Mark Jonson
+User2: !com.baeldung.serialization.protocols.User
+ id: 2
+ name: Johny Beth
+User3: !com.baeldung.serialization.protocols.User
+ id: 3
+ name: Eliza Green
+User4: !com.baeldung.serialization.protocols.User
+ id: 4
+ name: Monica Doe