import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.Serializable;
/**
* a utility class for handling little-endian numbers, which the 80x86 world is
*/
public static final class BufferUnderrunException extends IOException
{
+ /**
+ * Serial version UID
+ *
+ * @see Serializable
+ */
+ private static final long serialVersionUID = 8736973884877006145L;
BufferUnderrunException()
{
return Double.longBitsToDouble( getLong( data, offset ) );
}
+ /**
+ * get a float value from a byte array, reads it in little endian format
+ * then converts the resulting revolting IEEE 754 (curse them) floating
+ * point number to a happy java float
+ *
+ * @param data
+ * the byte array
+ * @param offset
+ * a starting offset into the byte array
+ * @return the double (64-bit) value
+ */
+ public static float getFloat( byte[] data, int offset )
+ {
+ return Float.intBitsToFloat( getInt( data, offset ) );
+ }
+
/**
* get an int value from the beginning of a byte array
*
putLong( data, offset, Double.doubleToLongBits( value ) );
}
+ /**
+ * put a double value into a byte array
+ *
+ * @param value
+ * the double (64-bit) value
+ * @param outputStream
+ * output stream
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ public static void putDouble( double value, OutputStream outputStream )
+ throws IOException
+ {
+ putLong( Double.doubleToLongBits( value ), outputStream );
+ }
+
+ /**
+ * put a float value into a byte array
+ *
+ * @param data
+ * the byte array
+ * @param offset
+ * a starting offset into the byte array
+ * @param value
+ * the float (32-bit) value
+ */
+ public static void putFloat( byte[] data, int offset, float value )
+ {
+ putInt( data, offset, Float.floatToIntBits( value ) );
+ }
+
+ /**
+ * put a float value into a byte array
+ *
+ * @param value
+ * the float (32-bit) value
+ * @param outputStream
+ * output stream
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ public static void putFloat( float value, OutputStream outputStream )
+ throws IOException
+ {
+ putInt( Float.floatToIntBits( value ), outputStream );
+ }
+
/**
* put an int value into beginning of a byte array
*
*/
public static void putLong( byte[] data, int offset, long value )
{
- int limit = LONG_SIZE + offset;
- long v = value;
+ data[offset + 0] = (byte) ( ( value >>> 0 ) & 0xFF );
+ data[offset + 1] = (byte) ( ( value >>> 8 ) & 0xFF );
+ data[offset + 2] = (byte) ( ( value >>> 16 ) & 0xFF );
+ data[offset + 3] = (byte) ( ( value >>> 24 ) & 0xFF );
+ data[offset + 4] = (byte) ( ( value >>> 32 ) & 0xFF );
+ data[offset + 5] = (byte) ( ( value >>> 40 ) & 0xFF );
+ data[offset + 6] = (byte) ( ( value >>> 48 ) & 0xFF );
+ data[offset + 7] = (byte) ( ( value >>> 56 ) & 0xFF );
+ }
- for ( int j = offset; j < limit; j++ )
- {
- data[j] = (byte) ( v & 0xFF );
- v >>= 8;
- }
+ /**
+ * Put long into output stream
+ *
+ * @param value
+ * the long (64-bit) value
+ * @param outputStream
+ * output stream
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ public static void putLong( long value, OutputStream outputStream )
+ throws IOException
+ {
+ outputStream.write( (byte) ( ( value >>> 0 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 8 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 16 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 24 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 32 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 40 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 48 ) & 0xFF ) );
+ outputStream.write( (byte) ( ( value >>> 56 ) & 0xFF ) );
}
/**
* @param value
* the short (16-bit) values
*/
- public static void putShortArray( byte[] data, int offset, short[] value )
+ public static void putShortArray( byte[] data, int startOffset, short[] value )
{
+ int offset = startOffset;
for ( short s : value )
{
putShort( data, offset, s );