[
https://issues.jboss.org/browse/JGRP-1772?page=com.atlassian.jira.plugin....
]
Bela Ban commented on JGRP-1772:
--------------------------------
When writing a multi-byte string using {{DataOutput.writeUTF()}}, then {{size()}} is
incorrect as it is {{str.length() +2}}. However, the {{length()}} method counts the number
of characters only, not the number of bytes needed to write the string to the output
stream. E.g. if we have a string whose 4 chars are all 2-byte values, then the current
method would compute the requires bytes to be 6 (4 bytes + 2 for the length field), but
effectively 10 bytes are written with {{writeUTF()}} (4 2-bytes values plus the 2 byte
length field).
I added {{Bits.sizeUTF()}} which computes the correct number of bytes. However, since
we're getting rid of {{writeUTF()}} anyway, this probably doesn't need to be done,
only for cases where we still use {{writeUTF()}}.
Optimize marshalling of strings
-------------------------------
Key: JGRP-1772
URL:
https://issues.jboss.org/browse/JGRP-1772
Project: JGroups
Issue Type: Enhancement
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 3.5
Currently, we use DataOutput.writeUTF() for all sorts of strings. This is implemented
inefficiently and potentially uses more than 1 byte per char.
Add another method writeString() which converts double byte chars to single byte chars so
that only ASCII is supported. This can be used by a lot of internal code which never uses
chars above 128.
For external code, such as {{JChannel.connect(String cluster_name)}}, we need to see
whether this is ok. Since cluster names are mainly used to differentiate clusters, perhaps
it is ok to mangle the names to chars below 128, although this would change cluster names
which use multi-byte chars.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira