@Override public byte[] serialise(final Map<? extends Object, ? extends Object> object) throws SerialisationException { LengthValueBytesSerialiserUtil.LengthValueBuilder builder = new LengthValueBytesSerialiserUtil.LengthValueBuilder(); try { for (final Map.Entry entry : object.entrySet()) { builder.appendLengthValueFromObjectToByteStream(getKeySerialiser(), entry.getKey()); builder.appendLengthValueFromObjectToByteStream(getValueSerialiser(), entry.getValue()); } } catch (final IOException e) { throw new SerialisationException(e.getMessage(), e); } return builder.toArray(); }
@Override public Map<? extends Object, ? extends Object> deserialise(final byte[] bytes) throws SerialisationException { Map map; if (null == getMapClass()) { map = new HashMap<>(); } else { try { map = getMapClass().newInstance(); } catch (final IllegalAccessException | IllegalArgumentException | SecurityException | InstantiationException e) { throw new SerialisationException("Failed to create map instance" + e.getMessage(), e); } } final int arrayLength = bytes.length; int carriage = 0; while (carriage < arrayLength) { LengthValueBytesSerialiserUtil.ObjectCarriage c = LengthValueBytesSerialiserUtil.deserialiseNextObject(getKeySerialiser(), carriage, bytes); LengthValueBytesSerialiserUtil.ObjectCarriage c2 = LengthValueBytesSerialiserUtil.deserialiseNextObject(getValueSerialiser(), c.getCarriage(), bytes); map.put(c.getObject(), c2.getObject()); carriage = c2.getCarriage(); } return map; }
@Override public byte[] serialise(final Map<? extends Object, ? extends Object> object) throws SerialisationException { LengthValueBytesSerialiserUtil.LengthValueBuilder builder = new LengthValueBytesSerialiserUtil.LengthValueBuilder(); try { for (final Map.Entry entry : object.entrySet()) { builder.appendLengthValueFromObjectToByteStream(getKeySerialiser(), entry.getKey()); builder.appendLengthValueFromObjectToByteStream(getValueSerialiser(), entry.getValue()); } } catch (final IOException e) { throw new SerialisationException(e.getMessage(), e); } return builder.toArray(); }
@Override public Map<? extends Object, ? extends Object> deserialise(final byte[] bytes) throws SerialisationException { Map map; if (null == getMapClass()) { map = new HashMap<>(); } else { try { map = getMapClass().newInstance(); } catch (final IllegalAccessException | IllegalArgumentException | SecurityException | InstantiationException e) { throw new SerialisationException("Failed to create map instance" + e.getMessage(), e); } } final int arrayLength = bytes.length; int carriage = 0; while (carriage < arrayLength) { LengthValueBytesSerialiserUtil.ObjectCarriage c = LengthValueBytesSerialiserUtil.deserialiseNextObject(getKeySerialiser(), carriage, bytes); LengthValueBytesSerialiserUtil.ObjectCarriage c2 = LengthValueBytesSerialiserUtil.deserialiseNextObject(getValueSerialiser(), c.getCarriage(), bytes); map.put(c.getObject(), c2.getObject()); carriage = c2.getCarriage(); } return map; }