I try this code :
byte arr[] = ByteBuffer.allocate(2).putInt(1).array()
But it fails with a BufferOverflowException.
Is 1 too big to be stored in 2 bytes ? Or is my problem somewhere else ?

Is 1 too big to be stored in 2 bytes ?
Well, an int is... putInt always writes 4 bytes. From the documentation for ByteBuffer.putInt
Throws:
BufferOverflowException - If there are fewer than four bytes remaining in this buffer
If you only want to put a two-byte integer, use putShort instead. If you want to store data in a variable-width encoding (where the space taken depends on the value), you'll probably need to write the code yourself.
See more on this question at Stackoverflow