[infinispan-dev] writeUnsignedInt() inefficient with bytes between 128 and 255

Galder Zamarreno galder.zamarreno at redhat.com
Thu Sep 3 07:48:23 EDT 2009



On 09/03/2009 01:29 PM, Galder Zamarreno wrote:
> On 09/03/2009 12:53 PM, Galder Zamarreno wrote:
>> Hi,
>>
>> While looking at https://jira.jboss.org/jira/browse/ISPN-149, I've
>> realised that writeUnsignedInt(), due to its dynamic behaivour, it's
>> more efficient than using a leading byte and then writing a byte, short
>> or int.
>>
>> However, I've spotted an unefficiency in
>> UnsignedNumeric.writeUnsignedInt() which is that if you write a byte
>> that's between 128-255, it writes two bytes, whereas in theory, you
>> could just write it as a single unsigned byte.
>>
>> Now, I'm not an expert on these methods, but I believe a
>> writeUnsignedInt like this would make 128-255 bytes be written as 1 byte
>> too:
>>
>>       public static void writeUnsignedInt(ObjectOutput out, int i) throws
>> IOException {
>>          while ((i&   ~0xFF) != 0) {
>>             out.writeByte((byte) ((i&   0xFF) | 0x100));
>>             i>>>= 8;
>>          }
>>          out.writeByte((byte) i);
>>       }
>>
>> And the read part would look like:
>>
>>       public static int readUnsignedInt(ObjectInput in) throws IOException {
>>          int b = in.readUnsignedByte();
>>          int i = b&   0xFF;
>>          for (int shift = 8; (b&   0x100) != 0; shift += 8) {
>>             b = in.readUnsignedByte();
>>             i |= (b&   0xFFL)<<   shift;
>>          }
>>          return i;
>>       }
>
> Hmmm, the read part is not working as expected. Trying to figure out how
> to get on values equal or bigger than 256 to read the next byte.

Hmmm, this is trickier than I thought. In the current solution, you know 
you have to read more bytes cos the byte you've just read is negative. 
However, if you use the full 4 bytes, how do you know that you need to 
read another byte? Hmmmm....

>
>> Manik, I think you created these methods in the 1st place, thoughts?
>> CC'ing David M L who's quite an expert on this too.
>>
>> Cheers,
>

-- 
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache



More information about the infinispan-dev mailing list