@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new FixedLenHexDimEnc(Integer.parseInt(args[0])); } }
private void testEncodeDecode(FixedLenHexDimEnc enc, String value) { byte[] buf = new byte[enc.getLengthOfEncoding()]; String valueStr = value; enc.encode(valueStr, buf, 0); String decode = enc.decode(buf, 0, buf.length); Assert.assertEquals(valueStr, decode); }
private void testSerDes(FixedLenHexDimEnc enc, String value) { DataTypeSerializer<Object> ser = enc.asDataTypeSerializer(); byte[] buf = new byte[enc.getLengthOfEncoding()]; String valueStr = value; ser.serialize(valueStr, ByteBuffer.wrap(buf)); String decode = (String) ser.deserialize(ByteBuffer.wrap(buf)); Assert.assertEquals(valueStr, decode); }
@Test public void testNull() { for (int i = 1; i < 9; i++) { FixedLenHexDimEnc enc = new FixedLenHexDimEnc(i); byte[] buf = new byte[enc.getLengthOfEncoding()]; enc.encode(null, buf, 0); Assert.assertTrue(DimensionEncoding.isNull(buf, 0, buf.length)); String decode = enc.decode(buf, 0, buf.length); Assert.assertEquals(null, decode); buf = new byte[enc.getLengthOfEncoding()]; DataTypeSerializer<Object> ser = enc.asDataTypeSerializer(); ser.serialize(null, ByteBuffer.wrap(buf)); Assert.assertTrue(DimensionEncoding.isNull(buf, 0, buf.length)); decode = (String) ser.deserialize(ByteBuffer.wrap(buf)); Assert.assertEquals(null, decode); } }
@Override public void serialize(Object value, ByteBuffer out) { byte[] buf = currentBuf(); String str = value == null ? null : value.toString(); encode(str, buf, 0); out.put(buf); }
@Override public Object deserialize(ByteBuffer in) { byte[] buf = currentBuf(); in.get(buf); return decode(buf, 0, buf.length); }
@Override public String decode(byte[] bytes, int offset, int len) { Preconditions.checkArgument(len == bytelen, "len " + len + " not equals " + bytelen); if (isNull(bytes, offset, len)) { return null; } byte[] ret = new byte[hexLength]; for (int i = 0; i < ret.length; i += 2) { byte temp = bytes[i / 2]; ret[i] = revdict[(temp & 0xF0) >>> 4]; int j = i + 1; if (j < hexLength) { ret[j] = revdict[temp & 0x0F]; } } return Bytes.toString(ret, 0, ret.length); }
if (valueLen >= hexLength && isF(value, 0, hexLength)) { if (avoidVerbose2++ % 10000 == 0) { logger.warn("All 'F' value: " + Bytes.toString(value, 0, valueLen) + "will become null after encode/decode. times:" + avoidVerbose);
@Override public void serialize(Object value, ByteBuffer out) { byte[] buf = currentBuf(); String str = value == null ? null : value.toString(); encode(str, buf, 0); out.put(buf); }
@Override public Object deserialize(ByteBuffer in) { byte[] buf = currentBuf(); in.get(buf); return decode(buf, 0, buf.length); }
@Override public String decode(byte[] bytes, int offset, int len) { Preconditions.checkArgument(len == bytelen, "len " + len + " not equals " + bytelen); if (isNull(bytes, offset, len)) { return null; } byte[] ret = new byte[hexLength]; for (int i = 0; i < ret.length; i += 2) { byte temp = bytes[i / 2]; ret[i] = revdict[(temp & 0xF0) >>> 4]; int j = i + 1; if (j < hexLength) { ret[j] = revdict[temp & 0x0F]; } } return Bytes.toString(ret, 0, ret.length); }
if (valueLen >= hexLength && isF(value, 0, hexLength)) { if (avoidVerbose2++ % 10000 == 0) { logger.warn("All 'F' value: " + Bytes.toString(value, 0, valueLen) + "will become null after encode/decode. times:" + avoidVerbose);
@Test public void testConstructor() { try { new FixedLenHexDimEnc(0); Assert.fail(); } catch (IllegalArgumentException e) { // expect } new FixedLenHexDimEnc(8); }
@Test public void testFixedLengthHexDimEncPreserveOrder() { FixedLenHexDimEnc enc = new FixedLenHexDimEnc(4); List<ByteArray> encodedValues = Lists.newArrayList(); encodedValues.add(encode(enc, "0000")); encodedValues.add(encode(enc, "0001")); encodedValues.add(encode(enc, "FFF0")); encodedValues.add(encode(enc, null)); assertTrue(Ordering.from(new DefaultGTComparator()).isOrdered(encodedValues)); }
@Test public void testFixLenHexEncSerDser() { FixedLenHexDimEnc enc = new FixedLenHexDimEnc(6); ByteBuffer buff = ByteBuffer.allocate(1024); writeDimensionEncoding(enc, buff); buff.flip(); DimensionEncoding dimensionEncoding = readDimensionEncoding(buff); Assert.assertEquals(3, dimensionEncoding.asDataTypeSerializer().peekLength(null)); } }
@Test public void testEncodeDecode2() { FixedLenHexDimEnc enc = new FixedLenHexDimEnc(5); testEncodeDecode(enc, "AF121"); testEncodeDecode(enc, "00000"); //with a little extra room all F is supported testEncodeDecode(enc, "FFFFF"); try { testEncodeDecode(enc, "FFF"); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<FFF[]> but was:<FFF[00]>", e.getMessage()); } try { testEncodeDecode(enc, "FFFFF0"); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<FFFFF[0]> but was:<FFFFF[]>", e.getMessage()); } try { testEncodeDecode(enc, "FFFF10"); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<FFFF1[0]> but was:<FFFF1[]>", e.getMessage()); } }
@Test public void testSerDes() { FixedLenHexDimEnc enc = new FixedLenHexDimEnc(4); testSerDes(enc, "AF12"); testSerDes(enc, "0000");
@Test public void testEncodeDecode() { FixedLenHexDimEnc enc = new FixedLenHexDimEnc(4); testEncodeDecode(enc, "AF12"); testEncodeDecode(enc, "0000");
@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new FixedLenHexDimEnc(Integer.parseInt(args[0])); } }