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:
Tobias Brunner 2015-11-11 19:30:04 +01:00
parent a50f3037ad
commit 9e81f33b55
1 changed files with 86 additions and 0 deletions

View File

@ -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