001package org.cache2k.storage;
002
003/*
004 * #%L
005 * cache2k core package
006 * %%
007 * Copyright (C) 2000 - 2015 headissue GmbH, Munich
008 * %%
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as
011 * published by the Free Software Foundation, either version 3 of the 
012 * License, or (at your option) any later version.
013 * 
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 * 
019 * You should have received a copy of the GNU General Public 
020 * License along with this program.  If not, see
021 * <http://www.gnu.org/licenses/gpl-3.0.html>.
022 * #L%
023 */
024
025import java.io.IOException;
026import java.io.InputStream;
027import java.io.ObjectInput;
028import java.io.ObjectOutput;
029import java.io.OutputStream;
030import java.nio.ByteBuffer;
031
032/**
033 * @author Jens Wilke; created: 2014-03-27
034 */
035public interface Marshaller {
036
037  byte[] marshall(Object o) throws IOException;
038
039  Object unmarshall(byte[] ba) throws IOException, ClassNotFoundException;
040
041  Object unmarshall(ByteBuffer b) throws IOException, ClassNotFoundException;
042
043  /**
044   * True if the marshaller is able to marshall this object. A specialized
045   * marshaller is allowed to return false. In this case a fallback is done
046   * to a default marshaller, which supports every object type.
047   */
048  boolean supports(Object o);
049
050  ObjectOutput startOutput(OutputStream out) throws IOException;
051
052  ObjectInput startInput(InputStream in) throws IOException;
053
054  /**
055   *
056   *
057   * @return parameters for the factory or null if the marshaller type is sufficient.
058   */
059  MarshallerFactory.Parameters getFactoryParameters();
060
061}