Moved the string read/write to static methods to

make it easier to reuse in classes that want to
read/write strings the same way without using
Serializer directly.


git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9456 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
PSp..om 13 years ago
parent 819407cf79
commit 516e3065dc
  1. 59
      engine/src/networking/com/jme3/network/serializing/serializers/StringSerializer.java

@ -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();
}
} }
} }

Loading…
Cancel
Save