2011-10-21 19:45:01 -04:00
|
|
|
package org.apache.poi.hpsf;
|
|
|
|
|
|
|
|
import org.apache.poi.util.Internal;
|
|
|
|
import org.apache.poi.util.LittleEndian;
|
2011-10-21 22:01:04 -04:00
|
|
|
import org.apache.poi.util.StringUtil;
|
2011-10-21 19:45:01 -04:00
|
|
|
|
|
|
|
@Internal
|
|
|
|
class UnicodeString
|
|
|
|
{
|
|
|
|
private byte[] _value;
|
|
|
|
|
|
|
|
UnicodeString( byte[] data, int offset )
|
|
|
|
{
|
|
|
|
int length = LittleEndian.getInt( data, offset );
|
|
|
|
|
|
|
|
if ( length == 0 )
|
|
|
|
{
|
|
|
|
_value = new byte[0];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-10-21 22:01:04 -04:00
|
|
|
_value = LittleEndian.getByteArray( data, offset
|
|
|
|
+ LittleEndian.INT_SIZE, length * 2 );
|
2011-10-21 19:45:01 -04:00
|
|
|
|
|
|
|
if ( _value[length * 2 - 1] != 0 || _value[length * 2 - 2] != 0 )
|
|
|
|
throw new IllegalPropertySetDataException(
|
|
|
|
"UnicodeString started at offset #" + offset
|
|
|
|
+ " is not NULL-terminated" );
|
|
|
|
}
|
|
|
|
|
2011-10-21 22:01:04 -04:00
|
|
|
String toJavaString()
|
|
|
|
{
|
|
|
|
if ( _value.length == 0 )
|
|
|
|
return null;
|
|
|
|
|
|
|
|
return StringUtil.getFromUnicodeLE( _value, 0,
|
|
|
|
( _value.length - 2 ) >> 1 );
|
|
|
|
}
|
|
|
|
|
2011-10-21 19:45:01 -04:00
|
|
|
int getSize()
|
|
|
|
{
|
|
|
|
return LittleEndian.INT_SIZE + _value.length;
|
|
|
|
}
|
2011-10-21 22:01:04 -04:00
|
|
|
|
|
|
|
byte[] getValue()
|
|
|
|
{
|
|
|
|
return _value;
|
|
|
|
}
|
2011-10-21 19:45:01 -04:00
|
|
|
}
|