All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.czyzby.websocket.serialization.impl.Base64Serializer Maven / Gradle / Ivy

The newest version!
package com.github.czyzby.websocket.serialization.impl;

import java.io.UnsupportedEncodingException;

import com.badlogic.gdx.utils.Base64Coder;
import com.github.czyzby.websocket.serialization.SerializationException;
import com.github.czyzby.websocket.serialization.Serializer;

/** Wraps around an existing {@link Serializer} to provide BASE64 encoding and decoding. Uses LibGDX {@link Base64Coder}
 * API.
 *
 * @author MJ */
public class Base64Serializer implements Serializer {
    private final Serializer serializer;
    private boolean useUrlSafeEncoding;

    public Base64Serializer(final Serializer serializer) {
        this.serializer = serializer;
    }

    /** @return wrapped serializer used for actual object (de)serializing. */
    public Serializer getSerializer() {
        return serializer;
    }

    @Override
    public String serializeAsString(final Object object) {
        final String serialized = serializer.serializeAsString(object);
        try {
            return Base64Coder.encodeString(serialized, useUrlSafeEncoding);
        } catch (final Exception exception) {
            throw new SerializationException("Unable to encode data into BASE64: " + serialized, exception);
        }
    }

    @Override
    public byte[] serialize(final Object object) {
        final byte[] serialized = serializer.serialize(object);
        try {
            return Base64Coder.encodeString(new String(serialized, "UTF-8"), useUrlSafeEncoding).getBytes("UTF-8");
        } catch (final UnsupportedEncodingException exception) {
            throw new SerializationException("Unexpected: UTF-8 format not supported.", exception);
        } catch (final Exception exception) {
            throw new SerializationException("Unable to encode data into BASE64.", exception);
        }
    }

    @Override
    public Object deserialize(final String data) {
        String decoded;
        try {
            decoded = Base64Coder.decodeString(data, useUrlSafeEncoding);
        } catch (final Exception exception) {
            throw new SerializationException("Unable to decode data from BASE64: " + data, exception);
        }
        return serializer.deserialize(decoded);
    }

    @Override
    public Object deserialize(final byte[] data) {
        String decoded;
        try {
            decoded = Base64Coder.decodeString(new String(data, "UTF-8"), useUrlSafeEncoding);
        } catch (final UnsupportedEncodingException exception) {
            throw new SerializationException("Unexpected: UTF-8 format not supported.", exception);
        } catch (final Exception exception) {
            throw new SerializationException("Unable to decode data from BASE64: " + data, exception);
        }
        return serializer.deserialize(decoded);
    }

    /** @param useUrlSafeEncoding if true, encoded data will be URL-safe.
     * @see Base64Coder#encodeString(String, boolean)
     * @see Base64Coder#decodeString(String, boolean) */
    public void setUseUrlSafeEncoding(final boolean useUrlSafeEncoding) {
        this.useUrlSafeEncoding = useUrlSafeEncoding;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy