private void prepareFields(final Object subject, final ClonerPutField fields) throws InvalidObjectException { final Map<String, SerializableField> defMap = fields.fieldDefMap; final Map<String, ReadField> map = fields.fieldMap; for (String name : defMap.keySet()) { final SerializableField serializableField = defMap.get(name); if (serializableField.isAccessible()) switch (serializableField.getKind()) { case BOOLEAN: map.put(name, new BooleanReadField(serializableField, serializableField.getBoolean(subject))); continue; case BYTE: map.put(name, new ByteReadField(serializableField, serializableField.getByte(subject))); continue; case CHAR: map.put(name, new CharReadField(serializableField, serializableField.getChar(subject))); continue; case DOUBLE: map.put(name, new DoubleReadField(serializableField, serializableField.getDouble(subject))); continue; case FLOAT: map.put(name, new FloatReadField(serializableField, serializableField.getFloat(subject))); continue; case INT: map.put(name, new IntReadField(serializableField, serializableField.getInt(subject))); continue; case LONG: map.put(name, new LongReadField(serializableField, serializableField.getLong(subject))); continue; case OBJECT: map.put(name, new ObjectReadField(serializableField, serializableField.getObject(subject))); continue; case SHORT: map.put(name, new ShortReadField(serializableField, serializableField.getShort(subject))); continue; default: throw new IllegalStateException(); } } }
private void storeFields(final SerializableClass cloneInfo, final Object clone, final ClonerPutField fields) throws IOException { final Map<String, ReadField> map = fields.fieldMap; for (SerializableField cloneField : cloneInfo.getFields()) { final String name = cloneField.getName(); final ReadField field = map.get(name); if (cloneField.isAccessible()) switch (cloneField.getKind()) { case BOOLEAN: cloneField.setBoolean(clone, field == null ? false : field.getBoolean()); continue; case BYTE: cloneField.setByte(clone, field == null ? 0 : field.getByte()); continue; case CHAR: cloneField.setChar(clone, field == null ? 0 : field.getChar()); continue; case DOUBLE: cloneField.setDouble(clone, field == null ? 0 : field.getDouble()); continue; case FLOAT: cloneField.setFloat(clone, field == null ? 0 : field.getFloat()); continue; case INT: cloneField.setInt(clone, field == null ? 0 : field.getInt()); continue; case LONG: cloneField.setLong(clone, field == null ? 0 : field.getLong()); continue; case OBJECT: cloneField.setObject(clone, field == null ? null : field.getObject()); continue; case SHORT: cloneField.setShort(clone, field == null ? 0 : field.getShort()); continue; default: throw new IllegalStateException(); } } }
/** * Create a synthetic field for this object class. * * @param name the name of the field * @param fieldType the field type * @param unshared {@code true} if the field should be unshared * @return the field * @throws ClassNotFoundException if a class was not found while looking up the subject class */ public SerializableField getSerializableField(String name, Class<?> fieldType, boolean unshared) throws ClassNotFoundException { final SerializableField serializableField = fieldsByName.get(name); if (serializableField != null) { return serializableField; } return new SerializableField(fieldType, name, unshared, null); }
/** * Construct a new instance. * * @param field the serializable field * @param value the value */ public FloatReadField(final SerializableField field, final float value) { super(field.getName(), false); this.value = value; }
SerializableField field = fields[i]; if (configuredVersion >= 4) { writeObject(field.getName()); } else { writeUTF(field.getName()); writeClass(field.getKind() == Kind.OBJECT ? Object.class : field.getType()); } catch (ClassNotFoundException e) { throw new InvalidClassException("Class of field was unloaded"); writeBoolean(field.isUnshared());
for (int i = 0; i < cnt; i ++) { final SerializableField field = serializableFields[i]; names[i] = field.getName(); switch (field.getKind()) { case BOOLEAN: { fields[i] = new BooleanFieldPutter(); fields[i] = new ObjectFieldPutter(field.isUnshared()); break;
private SerializableField getField(final String name, final Kind kind) { final SerializableField field = fieldDefMap.get(name); if (field == null) { throw new IllegalArgumentException("No field named '" + name + "' could be found"); } if (field.getKind() != kind) { throw new IllegalArgumentException("Field '" + name + "' is the wrong type (expected " + kind + ", got " + field.getKind() + ")"); } return field; }
protected void discardFields(final SerializableClassDescriptor descriptor) throws IOException { for (SerializableField serializableField : descriptor.getFields()) { try { switch (serializableField.getKind()) { case BOOLEAN: { readBoolean(); doReadObject(serializableField.isUnshared(), true); break;
/** * Construct a new instance. * * @param field the serializable field * @param value the value */ public ObjectReadField(final SerializableField field, final Object value) { super(field.getName(), false); this.value = value; }
private void cloneFields(final ClonerPutField fields) throws IOException, ClassNotFoundException { final Map<String, SerializableField> defMap = fields.fieldDefMap; final Map<String, ReadField> map = fields.fieldMap; for (String name : defMap.keySet()) { final SerializableField field = defMap.get(name); // only clone object field if it has been serialized if (field.getKind() == Kind.OBJECT && map.get(name) != null) { map.put(name, new ObjectReadField(field, clone(map.get(name).getObject()))); continue; } } }
public void writeTo(Object instance, ObjectOutput output) throws IOException { switch (kind) { case BOOLEAN: output.writeBoolean(getBoolean(instance)); break; case BYTE: output.writeByte(getByte(instance)); break; case CHAR: output.writeChar(getChar(instance)); break; case DOUBLE: output.writeDouble(getDouble(instance)); break; case FLOAT: output.writeFloat(getFloat(instance)); break; case INT: output.writeInt(getInt(instance)); break; case LONG: output.writeLong(getLong(instance)); break; case SHORT: output.writeShort(getShort(instance)); break; case OBJECT: output.writeObject(getObject(instance)); break; default:
protected void readFields(final Object obj, final SerializableClassDescriptor descriptor, final boolean discardMissing) throws IOException, ClassNotFoundException { for (SerializableField serializableField : descriptor.getFields()) { try { if (! serializableField.isAccessible()) { switch (serializableField.getKind()) { case BOOLEAN: { readBoolean(); doReadObject(serializableField.isUnshared(), true); break; switch (serializableField.getKind()) { case BOOLEAN: { serializableField.setBoolean(obj, readBoolean()); break; serializableField.setByte(obj, readByte()); break; serializableField.setChar(obj, readChar()); break; serializableField.setDouble(obj, readDouble()); break; serializableField.setFloat(obj, readFloat()); break; serializableField.setInt(obj, readInt());
/** * Construct a new instance. * * @param field the serializable field * @param value the value */ public LongReadField(final SerializableField field, final long value) { super(field.getName(), false); this.value = value; }
if (realField != null && realField.getType() == field.getType()) { fields[i] = new SerializableField(field.getType(), name, field.isUnshared(), realField); } else { fields[i] = new SerializableField(field.getType(), name, field.isUnshared(), null); for (Field field : declaredFields) { if ((field.getModifiers() & (Modifier.TRANSIENT | Modifier.STATIC)) == 0) { fields.add(new SerializableField(field.getType(), field.getName(), false, field));
for (SerializableField serializableField : serializableFields) { try { switch (serializableField.getKind()) { case BOOLEAN: { writeBoolean(false);
for (SerializableField serializableField : serializableFields) { try { switch (serializableField.getKind()) { case BOOLEAN: { writeBoolean(serializableField.isAccessible() && serializableField.getBoolean(obj)); break; writeByte(serializableField.isAccessible() ? serializableField.getByte(obj) : 0); break; writeShort(serializableField.isAccessible() ? serializableField.getShort(obj) : 0); break; writeInt(serializableField.isAccessible() ? serializableField.getInt(obj) : 0); break; writeChar(serializableField.isAccessible() ? serializableField.getChar(obj) : 0); break; writeLong(serializableField.isAccessible() ? serializableField.getLong(obj) : 0); break; writeDouble(serializableField.isAccessible() ? serializableField.getDouble(obj) : 0); break; writeFloat(serializableField.isAccessible() ? serializableField.getFloat(obj) : 0); break; doWriteObject(serializableField.isAccessible() ? serializableField.getObject(obj) : null, serializableField.isUnshared());
private void storeFields(final SerializableClass cloneInfo, final Object clone, final ClonerPutField fields) throws IOException { final Map<String, ReadField> map = fields.fieldMap; for (SerializableField cloneField : cloneInfo.getFields()) { final String name = cloneField.getName(); final ReadField field = map.get(name); if (cloneField.isAccessible()) switch (cloneField.getKind()) { case BOOLEAN: cloneField.setBoolean(clone, field == null ? false : field.getBoolean()); continue; case BYTE: cloneField.setByte(clone, field == null ? 0 : field.getByte()); continue; case CHAR: cloneField.setChar(clone, field == null ? 0 : field.getChar()); continue; case DOUBLE: cloneField.setDouble(clone, field == null ? 0 : field.getDouble()); continue; case FLOAT: cloneField.setFloat(clone, field == null ? 0 : field.getFloat()); continue; case INT: cloneField.setInt(clone, field == null ? 0 : field.getInt()); continue; case LONG: cloneField.setLong(clone, field == null ? 0 : field.getLong()); continue; case OBJECT: cloneField.setObject(clone, field == null ? null : field.getObject()); continue; case SHORT: cloneField.setShort(clone, field == null ? 0 : field.getShort()); continue; default: throw new IllegalStateException(); } } }
/** * Construct a new instance with the default value. * * @param field the serializable field */ public LongReadField(final SerializableField field) { super(field.getName(), true); value = 0; }
serializableClass = null; for (int i = 0; i < cnt; i ++) { fields[i] = new SerializableField(descriptors[i].getType(), names[i], unshareds[i]);
SerializableField field = streamFields[i]; try { switch (field.getKind()) { case BOOLEAN: { readFields[i] = new BooleanReadField(field, unmarshaller.readBoolean());