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

org.joda.beans.ser.bin.JodaBeanBinReader Maven / Gradle / Ivy

The newest version!
/*
 *  Copyright 2001-present Stephen Colebourne
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.joda.beans.ser.bin;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.InputStream;

import org.joda.beans.Bean;
import org.joda.beans.ser.JodaBeanSer;

/**
 * Provides the ability for a Joda-Bean to read from binary formats.
 * 

* This class is immutable and may be used from multiple threads. *

* The binary formats are defined by {@link JodaBeanBinWriter}. */ public class JodaBeanBinReader extends MsgPack { /** * Settings. */ private final JodaBeanSer settings; //----------------------------------------------------------------------- /** * Visualizes the binary data. * * @param input the input bytes, not null * @return the visualization */ public static String visualize(byte[] input) { return new MsgPackVisualizer(input).visualizeData(); } //----------------------------------------------------------------------- /** * Creates an instance. * * @param settings the settings, not null */ public JodaBeanBinReader(JodaBeanSer settings) { if (settings == null) { throw new NullPointerException("settings"); } this.settings = settings; } //----------------------------------------------------------------------- /** * Reads and parses to a bean. * * @param input the input bytes, not null * @return the bean, not null */ public Bean read(byte[] input) { return read(input, Bean.class); } /** * Reads and parses to a bean. * * @param the root type * @param input the input bytes, not null * @param rootType the root type, not null * @return the bean, not null */ public T read(byte[] input, Class rootType) { if (input == null) { throw new NullPointerException("input"); } return read(new ByteArrayInputStream(input), rootType); } /** * Reads and parses to a bean. * * @param input the input reader, not null * @return the bean, not null */ public Bean read(InputStream input) { return read(input, Bean.class); } /** * Reads and parses to a bean. * * @param the root type * @param input the input stream, not null * @param rootType the root type, not null * @return the bean, not null */ public T read(InputStream input, Class rootType) { if (input == null) { throw new NullPointerException("input"); } if (rootType == null) { throw new NullPointerException("rootType"); } DataInputStream dataInput; if (input instanceof DataInputStream) { dataInput = (DataInputStream) input; } else { dataInput = new DataInputStream(input); } try { try { return parseVersion(dataInput, rootType); } finally { input.close(); } } catch (RuntimeException ex) { throw ex; } catch (Exception ex) { throw new RuntimeException(ex); } } //----------------------------------------------------------------------- // parses the version private T parseVersion(DataInputStream input, Class declaredType) throws Exception { // root array int arrayByte = input.readByte(); int versionByte = input.readByte(); switch (versionByte) { case 1: if (arrayByte != MIN_FIX_ARRAY + 2) { throw new IllegalArgumentException( "Invalid binary data: Expected array with 2 elements, but was: 0x" + toHex(arrayByte)); } return new JodaBeanStandardBinReader(settings, input).read(declaredType); case 2: if (arrayByte != MIN_FIX_ARRAY + 4) { throw new IllegalArgumentException( "Invalid binary data: Expected array with 4 elements, but was: 0x" + toHex(arrayByte)); } return new JodaBeanReferencingBinReader(settings, input).read(declaredType); default: throw new IllegalArgumentException( "Invalid binary data: Expected version 1 or 2, but was: 0x" + toHex(versionByte)); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy