Base64Codec.java

/*
 * Copyright (C) 2017, 2018, 2020 XStream Committers.
 * All rights reserved.
 *
 * The software in this package is published under the terms of the BSD
 * style license a copy of which has been included with this distribution in
 * the LICENSE.txt file.
 *
 * Created on 29. March 2020 by Joerg Schaible, renamed from com.thoughtworks.xstream.core.Base64JavaUtilCodec
 */
package com.thoughtworks.xstream.core;

import java.util.Base64;


/**
 * Base64 codec implementation based on java.util.Base64.
 *
 * @author Jörg Schaible
 * @since upcoming
 */
public class Base64Codec implements StringCodec {
    final private Base64.Decoder decoder;
    final private Base64.Encoder encoder;

    /**
     * Constructs a Base64Codec.
     * <p>
     * The implementation will use a basic encoder and a MIME decoder by default.
     * </p>
     *
     * @since upcoming
     */
    public Base64Codec() {
        this(Base64.getEncoder(), Base64.getMimeDecoder());
    }

    /**
     * Constructs a Base64Codec with provided encoder and decoder.
     *
     * @param encoder the encoder instance
     * @param decoder the decoder instance
     * @since upcoming
     */
    public Base64Codec(final Base64.Encoder encoder, final Base64.Decoder decoder) {
        this.encoder = encoder;
        this.decoder = decoder;
    }

    @Override
    public byte[] decode(final String base64) {
        return decoder.decode(base64);
    }

    @Override
    public String encode(final byte[] data) {
        return encoder.encodeToString(data);
    }
}