ByteOrder
is a final class that defines byte ordering—endianness—used when reading or writing multibyte data types (like int
, float
, etc.) into a ByteBuffer
.
What is Byte Order?
Byte order (endianness) refers to the order in which bytes are stored in memory:
- Big-endian: Most significant byte is stored first.
- Little-endian: Least significant byte is stored first.
Java uses big-endian by default.
Commonly Used Methods

Simple Java Program using ByteOrder
Show how to check and print the platform’s native byte order.
import java.nio.ByteOrder; public class SimpleByteOrderExample { public static void main(String[] args) { ByteOrder order = ByteOrder.nativeOrder(); System.out.println("Native Byte Order of this machine: " + order); } } /* Native Byte Order of this machine: LITTLE_ENDIAN */
Problem Statement (With LotusJavaPrince and Mahesh):
LotusJavaPrince is designing a cross-platform file exchange system. Mahesh is in charge of implementing a buffer handler that must store integers in little-endian format even if the platform is big-endian. The task is to use ByteBuffer
with the correct ByteOrder
so that the integer is stored in little-endian format and read back correctly.
Solution: Use ByteBuffer.order(ByteOrder.LITTLE_ENDIAN) to set the byte order explicitly.
import java.nio.ByteBuffer; import java.nio.ByteOrder; public class ByteOrderCaseStudy { public static void main(String[] args) { int value = 0x12345678; // Default buffer (big-endian) ByteBuffer bigEndianBuffer = ByteBuffer.allocate(4); bigEndianBuffer.putInt(value); byte[] bigEndianBytes = bigEndianBuffer.array(); // Little-endian buffer ByteBuffer littleEndianBuffer = ByteBuffer.allocate(4); littleEndianBuffer.order(ByteOrder.LITTLE_ENDIAN); littleEndianBuffer.putInt(value); byte[] littleEndianBytes = littleEndianBuffer.array(); // Print bytes for both System.out.println("Big-Endian Bytes:"); for (byte b : bigEndianBytes) { System.out.printf("%02X ", b); } System.out.println("\nLittle-Endian Bytes:"); for (byte b : littleEndianBytes) { System.out.printf("%02X ", b); } // Now read the value back from little-endian buffer ByteBuffer readBuffer = ByteBuffer.wrap(littleEndianBytes); readBuffer.order(ByteOrder.LITTLE_ENDIAN); int readValue = readBuffer.getInt(); System.out.println("\nRead back value: 0x" + Integer.toHexString(readValue).toUpperCase()); } }
Output
Big-Endian Bytes:
12 34 56 78
Little-Endian Bytes:
78 56 34 12
Read back value: 0x12345678
The ByteOrder
class in Java NIO is crucial for handling endianness, which determines the byte arrangement of multi-byte data types (like int
, float
, or long
) during storage or transmission. It supports two constants:
ByteOrder.BIG_ENDIAN
– most significant byte first,ByteOrder.LITTLE_ENDIAN
– least significant byte first.
This class is especially important when working with ByteBuffer
and other NIO buffers, allowing developers to control how bytes are interpreted and written, particularly in cross-platform or binary file/network communication scenarios.
By setting the appropriate byte order using buffer.order(ByteOrder.LITTLE_ENDIAN)
, applications can ensure correct data interpretation and compatibility with external systems that follow specific byte orders.