I need to send a Network Order short for a game server I\'m writing using Java. I read about network order, but I couldn\'t find any details about a short that is sent befor
Java NIO bytes buffers have support for changing the byte order. Network byte order is Big Endian therefore.
// Allocate a big endian byte buffer
ByteBuffer bb = ByteBuffer.allocate(4096);
bb.order(ByteOrder.BIG_ENDIAN);
bb.putShort(12345);
// Write the buffer to an NIO channel
bb.flip();
channel.write(bb);
Byte Order is the order in which the bytes for numerical values that are larger than a single byte are stored. There are 2 flavours Big Endian (most significant byte first) and Little Endian (least significant byte first).
You can wrap your OutputStream with DataOutputStream.
You can then use DataOutputStream.writeShort. By contract the method writes data in network order.
In java, a short int is a 2 byte quantity. Network byte order send the high-order byte first, followed by the next highest-order byte and so on, with the low order byte sent last. If you have an OutputStream o
, and a short i
, then
o.write((i >> 8) & 0xff);
o.write(i & 0xff);
send the short in network byte order. I recommend using a DataOutputStream
which has a method writeShort()
(and writeInt
, writeLong
, etc.) which automatically write in network byte order.