/* * Copyright (c) 2016, Metron, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Metron, Inc. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL METRON, INC. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.metsci.glimpse.util.io; import java.io.DataInput; import java.io.IOException; /** * LittleEndianDataInput is a wrapper around a DataInput object * that converts formatted input from little-endian to Java standard * big-endian after reading it in. * * @author hogye */ public class LittleEndianDataInput implements DataInput { private final DataInput in; public LittleEndianDataInput( DataInput in ) { this.in = in; } @Override public void readFully( byte[] arg0 ) throws IOException { in.readFully( arg0 ); } @Override public void readFully( byte[] arg0, int arg1, int arg2 ) throws IOException { in.readFully( arg0, arg1, arg2 ); } @Override public int skipBytes( int arg0 ) throws IOException { return in.skipBytes( arg0 ); } @Override public boolean readBoolean( ) throws IOException { return in.readBoolean( ); } @Override public byte readByte( ) throws IOException { return in.readByte( ); } @Override public int readUnsignedByte( ) throws IOException { return in.readUnsignedByte( ); } @Override public short readShort( ) throws IOException { int a = in.readUnsignedByte( ); int b = in.readByte( ); return ( short ) ( ( b << 8 ) | a ); } @Override public int readUnsignedShort( ) throws IOException { int a = in.readUnsignedByte( ); int b = in.readUnsignedByte( ); return ( ( b << 8 ) | a ); } @Override public char readChar( ) throws IOException { return in.readChar( ); } @Override public int readInt( ) throws IOException { int a = in.readUnsignedByte( ); int b = in.readUnsignedByte( ); int c = in.readUnsignedByte( ); int d = in.readByte( ); return ( ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a ); } @Override public long readLong( ) throws IOException { long a = in.readUnsignedByte( ); long b = in.readUnsignedByte( ); long c = in.readUnsignedByte( ); long d = in.readUnsignedByte( ); long e = in.readUnsignedByte( ); long f = in.readUnsignedByte( ); long g = in.readUnsignedByte( ); long h = in.readByte( ); return ( ( h << 56 ) | ( g << 48 ) | ( f << 40 ) | ( e << 32 ) | ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a ); } @Override public float readFloat( ) throws IOException { return Float.intBitsToFloat( readInt( ) ); } @Override public double readDouble( ) throws IOException { return Double.longBitsToDouble( readLong( ) ); } @Override public String readLine( ) throws IOException { return in.readLine( ); } @Override public String readUTF( ) throws IOException { return in.readUTF( ); } }