@Override public Map<K, V> decode(byte[] b) { byte[][] escapedElements = split(b); Map<K, V> decodedMap = new HashMap<>(); for (int i = 0; i < escapedElements.length; i += 2) { K key = keyLexicoder.decode(unescape(escapedElements[i])); V value = valueLexicoder.decode(unescape(escapedElements[i + 1])); decodedMap.put(key, value); } return decodedMap; } }
@Override protected T decodeUnchecked(byte[] data, int offset, int len) { byte ret[] = new byte[len - 1]; int dataIndex; for (int i = 0; i < ret.length; i++) { dataIndex = offset + i; ret[i] = (byte) (0xff - (0xff & data[dataIndex])); } return lexicoder.decode(unescape(ret)); } }
@Override protected List<LT> decodeUnchecked(byte[] b, int offset, int len) { byte[][] escapedElements = split(b, offset, len); ArrayList<LT> ret = new ArrayList<>(escapedElements.length); for (byte[] escapedElement : escapedElements) { ret.add(lexicoder.decode(unescape(escapedElement))); } return ret; } }
@Override protected ComparablePair<A,B> decodeUnchecked(byte[] data, int offset, int len) { byte[][] fields = split(data, offset, len); if (fields.length != 2) { throw new RuntimeException("Data does not have 2 fields, it has " + fields.length); } return new ComparablePair<>(firstLexicoder.decode(unescape(fields[0])), secondLexicoder.decode(unescape(fields[1]))); }