Package org.apache.commons.io
Class EndianUtils
- java.lang.Object
-
- org.apache.commons.io.EndianUtils
-
public class EndianUtils extends java.lang.Object
Helps with reading and writing primitive numeric types (short
,int
,long
,float
, anddouble
) that are encoded in little endian using two's complement or unsigned representations.Different computer architectures have different conventions for byte ordering. In "Little Endian" architectures (e.g. X86), the low-order byte is stored in memory at the lowest address, and subsequent bytes at higher addresses. In "Big Endian" architectures (e.g. Motorola 680X0), the situation is reversed. Most methods and classes throughout Java — e.g.
DataInputStream
andDouble.longBitsToDouble()
— assume data is laid out in big endian order with the most significant byte first. The methods in this class read and write data in little endian order, generally by reversing the bytes and then using the regular Java methods to convert the swapped bytes to a primitive type.Provenance: Excalibur
- See Also:
SwappedDataInputStream
-
-
Constructor Summary
Constructors Constructor Description EndianUtils()
Deprecated.TODO Make private in 3.0.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static double
readSwappedDouble(byte[] data, int offset)
Reads a little endiandouble
value from a byte array at a given offset.static double
readSwappedDouble(java.io.InputStream input)
Reads a little endiandouble
value from an InputStream.static float
readSwappedFloat(byte[] data, int offset)
Reads a little endianfloat
value from a byte array at a given offset.static float
readSwappedFloat(java.io.InputStream input)
Reads a little endianfloat
value from an InputStream.static int
readSwappedInteger(byte[] data, int offset)
Reads a little endianint
value from a byte array at a given offset.static int
readSwappedInteger(java.io.InputStream input)
Reads a little endianint
value from an InputStream.static long
readSwappedLong(byte[] data, int offset)
Reads a little endianlong
value from a byte array at a given offset.static long
readSwappedLong(java.io.InputStream input)
Reads a little endianlong
value from an InputStream.static short
readSwappedShort(byte[] data, int offset)
Reads a little endianshort
value from a byte array at a given offset.static short
readSwappedShort(java.io.InputStream input)
Reads a little endianshort
value from an InputStream.static long
readSwappedUnsignedInteger(byte[] data, int offset)
Reads a little endian unsigned integer (32-bit) value from a byte array at a given offset.static long
readSwappedUnsignedInteger(java.io.InputStream input)
Reads a little endian unsigned integer (32-bit) from an InputStream.static int
readSwappedUnsignedShort(byte[] data, int offset)
Reads an unsigned short (16-bit) value from a byte array in little endian order at a given offset.static int
readSwappedUnsignedShort(java.io.InputStream input)
Reads an unsigned short (16-bit) from an InputStream in little endian order.static double
swapDouble(double value)
Converts adouble
value from big endian to little endian and vice versa.static float
swapFloat(float value)
Converts afloat
value from big endian to little endian and vice versa.static int
swapInteger(int value)
Converts anint
value from big endian to little endian and vice versa.static long
swapLong(long value)
Converts along
value from big endian to little endian and vice versa.static short
swapShort(short value)
Converts ashort
value from big endian to little endian and vice versa.static void
writeSwappedDouble(byte[] data, int offset, double value)
Writes the 8 bytes of adouble
to a byte array at a given offset in little endian order.static void
writeSwappedDouble(java.io.OutputStream output, double value)
Writes the 8 bytes of adouble
to an output stream in little endian order.static void
writeSwappedFloat(byte[] data, int offset, float value)
Writes the 4 bytes of afloat
to a byte array at a given offset in little endian order.static void
writeSwappedFloat(java.io.OutputStream output, float value)
Writes the 4 bytes of afloat
to an output stream in little endian order.static void
writeSwappedInteger(byte[] data, int offset, int value)
Writes the 4 bytes of anint
to a byte array at a given offset in little endian order.static void
writeSwappedInteger(java.io.OutputStream output, int value)
Writes the 4 bytes of anint
to an output stream in little endian order.static void
writeSwappedLong(byte[] data, int offset, long value)
Writes the 8 bytes of along
to a byte array at a given offset in little endian order.static void
writeSwappedLong(java.io.OutputStream output, long value)
Writes the 8 bytes of along
to an output stream in little endian order.static void
writeSwappedShort(byte[] data, int offset, short value)
Writes the 2 bytes of ashort
to a byte array at a given offset in little endian order.static void
writeSwappedShort(java.io.OutputStream output, short value)
Writes the 2 bytes of ashort
to an output stream using little endian encoding.
-
-
-
Method Detail
-
readSwappedDouble
public static double readSwappedDouble(byte[] data, int offset)
Reads a little endiandouble
value from a byte array at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 8 bytes
-
readSwappedDouble
public static double readSwappedDouble(java.io.InputStream input) throws java.io.IOException
Reads a little endiandouble
value from an InputStream.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
readSwappedFloat
public static float readSwappedFloat(byte[] data, int offset)
Reads a little endianfloat
value from a byte array at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 4 bytes
-
readSwappedFloat
public static float readSwappedFloat(java.io.InputStream input) throws java.io.IOException
Reads a little endianfloat
value from an InputStream.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
readSwappedInteger
public static int readSwappedInteger(byte[] data, int offset)
Reads a little endianint
value from a byte array at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 4 bytes
-
readSwappedInteger
public static int readSwappedInteger(java.io.InputStream input) throws java.io.IOException
Reads a little endianint
value from an InputStream.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
readSwappedLong
public static long readSwappedLong(byte[] data, int offset)
Reads a little endianlong
value from a byte array at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 8 bytes
-
readSwappedLong
public static long readSwappedLong(java.io.InputStream input) throws java.io.IOException
Reads a little endianlong
value from an InputStream.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
readSwappedShort
public static short readSwappedShort(byte[] data, int offset)
Reads a little endianshort
value from a byte array at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 2 bytes
-
readSwappedShort
public static short readSwappedShort(java.io.InputStream input) throws java.io.IOException
Reads a little endianshort
value from an InputStream.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
readSwappedUnsignedInteger
public static long readSwappedUnsignedInteger(byte[] data, int offset)
Reads a little endian unsigned integer (32-bit) value from a byte array at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 4 bytes
-
readSwappedUnsignedInteger
public static long readSwappedUnsignedInteger(java.io.InputStream input) throws java.io.IOException
Reads a little endian unsigned integer (32-bit) from an InputStream.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
readSwappedUnsignedShort
public static int readSwappedUnsignedShort(byte[] data, int offset)
Reads an unsigned short (16-bit) value from a byte array in little endian order at a given offset.- Parameters:
data
- source byte arrayoffset
- starting offset in the byte array- Returns:
- the value read
- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 2 bytes
-
readSwappedUnsignedShort
public static int readSwappedUnsignedShort(java.io.InputStream input) throws java.io.IOException
Reads an unsigned short (16-bit) from an InputStream in little endian order.- Parameters:
input
- source InputStream- Returns:
- the value just read
- Throws:
java.io.IOException
- in case of an I/O problem
-
swapDouble
public static double swapDouble(double value)
Converts adouble
value from big endian to little endian and vice versa. That is, it converts thedouble
to bytes, reverses the bytes, and then reinterprets those bytes as a newdouble
. This can be useful if you have a number that was read from the underlying source in the wrong endianness.- Parameters:
value
- value to convert- Returns:
- the converted value
-
swapFloat
public static float swapFloat(float value)
Converts afloat
value from big endian to little endian and vice versa.- Parameters:
value
- value to convert- Returns:
- the converted value
-
swapInteger
public static int swapInteger(int value)
Converts anint
value from big endian to little endian and vice versa.- Parameters:
value
- value to convert- Returns:
- the converted value
-
swapLong
public static long swapLong(long value)
Converts along
value from big endian to little endian and vice versa.- Parameters:
value
- value to convert- Returns:
- the converted value
-
swapShort
public static short swapShort(short value)
Converts ashort
value from big endian to little endian and vice versa.- Parameters:
value
- value to convert- Returns:
- the converted value
-
writeSwappedDouble
public static void writeSwappedDouble(byte[] data, int offset, double value)
Writes the 8 bytes of adouble
to a byte array at a given offset in little endian order.- Parameters:
data
- target byte arrayoffset
- starting offset in the byte arrayvalue
- value to write- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 8 bytes
-
writeSwappedDouble
public static void writeSwappedDouble(java.io.OutputStream output, double value) throws java.io.IOException
Writes the 8 bytes of adouble
to an output stream in little endian order.- Parameters:
output
- target OutputStreamvalue
- value to write- Throws:
java.io.IOException
- in case of an I/O problem
-
writeSwappedFloat
public static void writeSwappedFloat(byte[] data, int offset, float value)
Writes the 4 bytes of afloat
to a byte array at a given offset in little endian order.- Parameters:
data
- target byte arrayoffset
- starting offset in the byte arrayvalue
- value to write- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 4 bytes
-
writeSwappedFloat
public static void writeSwappedFloat(java.io.OutputStream output, float value) throws java.io.IOException
Writes the 4 bytes of afloat
to an output stream in little endian order.- Parameters:
output
- target OutputStreamvalue
- value to write- Throws:
java.io.IOException
- in case of an I/O problem
-
writeSwappedInteger
public static void writeSwappedInteger(byte[] data, int offset, int value)
Writes the 4 bytes of anint
to a byte array at a given offset in little endian order.- Parameters:
data
- target byte arrayoffset
- starting offset in the byte arrayvalue
- value to write- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 4 bytes
-
writeSwappedInteger
public static void writeSwappedInteger(java.io.OutputStream output, int value) throws java.io.IOException
Writes the 4 bytes of anint
to an output stream in little endian order.- Parameters:
output
- target OutputStreamvalue
- value to write- Throws:
java.io.IOException
- in case of an I/O problem
-
writeSwappedLong
public static void writeSwappedLong(byte[] data, int offset, long value)
Writes the 8 bytes of along
to a byte array at a given offset in little endian order.- Parameters:
data
- target byte arrayoffset
- starting offset in the byte arrayvalue
- value to write- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 8 bytes
-
writeSwappedLong
public static void writeSwappedLong(java.io.OutputStream output, long value) throws java.io.IOException
Writes the 8 bytes of along
to an output stream in little endian order.- Parameters:
output
- target OutputStreamvalue
- value to write- Throws:
java.io.IOException
- in case of an I/O problem
-
writeSwappedShort
public static void writeSwappedShort(byte[] data, int offset, short value)
Writes the 2 bytes of ashort
to a byte array at a given offset in little endian order.- Parameters:
data
- target byte arrayoffset
- starting offset in the byte arrayvalue
- value to write- Throws:
java.lang.IllegalArgumentException
- if the part of the byte array starting at offset does not have at least 2 bytes
-
writeSwappedShort
public static void writeSwappedShort(java.io.OutputStream output, short value) throws java.io.IOException
Writes the 2 bytes of ashort
to an output stream using little endian encoding.- Parameters:
output
- target OutputStreamvalue
- value to write- Throws:
java.io.IOException
- in case of an I/O problem
-
-