android: Properly handle shorter types in BufferedByteWriter
In Java all integer types are signed, when a negative integer is casted to a larger type (e.g. int to long) then due to sign extension the upper bytes are not 0. So writing that value to a byte array does not produce the expected result. By overloading the putX() methods we make sure to upcast the values correctly.
This commit is contained in:
parent
a50f3037ad
commit
9e81f33b55
|
@ -122,6 +122,16 @@ public class BufferedByteWriter
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given short value (16-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put16(byte value)
|
||||
{
|
||||
return this.put16((short)(value & 0xFF));
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given short value (16-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
|
@ -134,6 +144,32 @@ public class BufferedByteWriter
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write 24-bit of the given value in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put24(byte value)
|
||||
{
|
||||
ensureCapacity(3);
|
||||
mWriter.putShort((short)0);
|
||||
mWriter.put(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write 24-bit of the given value in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put24(short value)
|
||||
{
|
||||
ensureCapacity(3);
|
||||
mWriter.put((byte)0);
|
||||
mWriter.putShort(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write 24-bit of the given value in big-endian order to the buffer
|
||||
* @param value
|
||||
|
@ -147,6 +183,26 @@ public class BufferedByteWriter
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given int value (32-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put32(byte value)
|
||||
{
|
||||
return put32(value & 0xFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given int value (32-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put32(short value)
|
||||
{
|
||||
return put32(value & 0xFFFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given int value (32-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
|
@ -159,6 +215,36 @@ public class BufferedByteWriter
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given long value (64-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put64(byte value)
|
||||
{
|
||||
return put64(value & 0xFFL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given long value (64-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put64(short value)
|
||||
{
|
||||
return put64(value & 0xFFFFL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given long value (64-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
* @return the writer
|
||||
*/
|
||||
public BufferedByteWriter put64(int value)
|
||||
{
|
||||
return put64(value & 0xFFFFFFFFL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given long value (64-bit) in big-endian order to the buffer
|
||||
* @param value
|
||||
|
|
Loading…
Reference in New Issue