From 38e00287f761a6831a071851a7cd568063741d60 Mon Sep 17 00:00:00 2001 From: "David M. Lloyd" Date: Fri, 31 Mar 2017 13:35:49 -0500 Subject: [PATCH] [JBMAR-194] Increase potential serialization density by allowing object table substitution of class descriptor components --- .../jboss/marshalling/river/RiverMarshaller.java | 13 +++++++++++-- .../jboss/marshalling/river/RiverUnmarshaller.java | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java b/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java index 9f19cacc..746f59aa 100644 --- a/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java +++ b/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java @@ -1481,7 +1481,12 @@ protected void writeNewSerializableClass(final Class objClass) throws IOExcep } else { write(ID_SERIALIZABLE_CLASS); } - writeString(classResolver.getClassName(objClass)); + final String className = classResolver.getClassName(objClass); + if (configuredVersion >= 4) { + writeObject(className); + } else { + writeString(className); + } writeLong(info.getEffectiveSerialVersionUID()); classCache.put(objClass, classSeq++); classResolver.annotateClass(this, objClass); @@ -1490,7 +1495,11 @@ protected void writeNewSerializableClass(final Class objClass) throws IOExcep writeInt(cnt); for (int i = 0; i < cnt; i++) { SerializableField field = fields[i]; - writeUTF(field.getName()); + if (configuredVersion >= 4) { + writeObject(field.getName()); + } else { + writeUTF(field.getName()); + } try { writeClass(field.getKind() == Kind.OBJECT ? Object.class : field.getType()); } catch (ClassNotFoundException e) { diff --git a/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java b/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java index a5026eba..029b8776 100644 --- a/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java +++ b/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java @@ -1018,7 +1018,7 @@ ClassDescriptor doReadClassDescriptor(final int classType, final boolean require case ID_SERIALIZABLE_CLASS: { int idx = classCache.size(); classCache.add(null); - final String className = readString(); + final String className = configuredVersion >= 4 ? readObject(String.class) : readString(); final long uid = readLong(); Class clazz = null; try { @@ -1033,7 +1033,7 @@ ClassDescriptor doReadClassDescriptor(final int classType, final boolean require final ClassDescriptor[] descriptors = new ClassDescriptor[cnt]; final boolean[] unshareds = new boolean[cnt]; for (int i = 0; i < cnt; i ++) { - names[i] = readUTF(); + names[i] = configuredVersion >= 4 ? readObject(String.class) : readUTF(); descriptors[i] = doReadClassDescriptor(readUnsignedByte(), true); unshareds[i] = readBoolean(); }