@ -40,13 +40,39 @@ import java.nio.ByteBuffer;
/ * *
/ * *
* String serializer .
* String serializer .
*
*
* @author Lars Wesselius
* @author Lars Wesselius , Paul Speed
* /
* /
@SuppressWarnings ( "unchecked" )
@SuppressWarnings ( "unchecked" )
public class StringSerializer extends Serializer {
public class StringSerializer extends Serializer {
public String readObject ( ByteBuffer data , Class c ) throws IOException {
public static void writeString ( String s , ByteBuffer buffer ) throws IOException {
if ( s = = null ) {
// Write that it's 0.
buffer . put ( ( byte ) 0 ) ;
return ;
}
byte [ ] stringBytes = s . getBytes ( "UTF-8" ) ;
int bufferLength = stringBytes . length ;
try {
if ( bufferLength < = Byte . MAX_VALUE ) {
buffer . put ( ( byte ) 1 ) ;
buffer . put ( ( byte ) bufferLength ) ;
} else if ( bufferLength < = Short . MAX_VALUE ) {
buffer . put ( ( byte ) 2 ) ;
buffer . putShort ( ( short ) bufferLength ) ;
} else {
buffer . put ( ( byte ) 3 ) ;
buffer . putInt ( bufferLength ) ;
}
buffer . put ( stringBytes ) ;
}
catch ( BufferOverflowException e ) {
e . printStackTrace ( ) ;
}
}
public static String readString ( ByteBuffer data ) throws IOException {
int length = - 1 ;
int length = - 1 ;
byte type = data . get ( ) ;
byte type = data . get ( ) ;
if ( type = = ( byte ) 0 ) {
if ( type = = ( byte ) 0 ) {
@ -68,32 +94,13 @@ public class StringSerializer extends Serializer {
return new String ( buffer , "UTF-8" ) ;
return new String ( buffer , "UTF-8" ) ;
}
}
public String readObject ( ByteBuffer data , Class c ) throws IOException {
return readString ( data ) ;
}
public void writeObject ( ByteBuffer buffer , Object object ) throws IOException {
public void writeObject ( ByteBuffer buffer , Object object ) throws IOException {
String string = ( String ) object ;
String string = ( String ) object ;
if ( string = = null ) {
writeString ( string , buffer ) ;
// Write that it's 0.
buffer . put ( ( byte ) 0 ) ;
return ;
}
byte [ ] stringBytes = string . getBytes ( "UTF-8" ) ;
int bufferLength = stringBytes . length ;
try {
if ( bufferLength < = Byte . MAX_VALUE ) {
buffer . put ( ( byte ) 1 ) ;
buffer . put ( ( byte ) bufferLength ) ;
} else if ( bufferLength < = Short . MAX_VALUE ) {
buffer . put ( ( byte ) 2 ) ;
buffer . putShort ( ( short ) bufferLength ) ;
} else {
buffer . put ( ( byte ) 3 ) ;
buffer . putInt ( bufferLength ) ;
}
buffer . put ( stringBytes ) ;
}
catch ( BufferOverflowException e ) {
e . printStackTrace ( ) ;
}
}
}
}
}