@Override public Integer readByteOrder(ScanBuffer buffer) { return buffer.getInt() + Integer.MIN_VALUE; }
private static long readUnsigned(ScanBuffer in) { long value = 0; byte b; do { b = in.getByte(); value = value << 7 | (b & BIT_MASK); } while (b >= 0); return value; }
@Override public Double read(ScanBuffer buffer) { return buffer.getDouble(); }
@Override public Geoshape read(ScanBuffer buffer) { long l = VariableLong.readPositive(buffer); assert l>0 && l<Integer.MAX_VALUE; int length = (int)l; int position = ((ReadArrayBuffer) buffer).getPosition(); InputStream inputStream = new ByteArrayInputStream(buffer.getBytes(length)); try { return GeoshapeBinarySerializer.read(inputStream); } catch (IOException e) { // retry using legacy point deserialization try { ((ReadArrayBuffer) buffer).movePositionTo(position); final float lat = buffer.getFloat(); final float lon = buffer.getFloat(); return point(lat, lon); } catch (Exception ignored) { } // throw original exception throw new RuntimeException("I/O exception reading geoshape", e); } }
@Override public byte[] read(ScanBuffer buffer) { int length = getLength(buffer); if (length<0) return null; return buffer.getBytes(length); }
@Override public Float read(ScanBuffer buffer) { return buffer.getFloat(); }
@Override public char[] read(ScanBuffer buffer) { int length = getLength(buffer); if (length<0) return null; return buffer.getChars(length); }
@Override public int[] read(ScanBuffer buffer) { int length = getLength(buffer); if (length<0) return null; return buffer.getInts(length); }
@Override public float[] read(ScanBuffer buffer) { int length = getLength(buffer); if (length<0) return null; return buffer.getFloats(length); }
@Override public double[] read(ScanBuffer buffer) { int length = getLength(buffer); if (length<0) return null; return buffer.getDoubles(length); }
public static StaticBuffer readBuffer(ScanBuffer in) { long length = VariableLong.readPositive(in); Preconditions.checkArgument(length>=0 && length<=Integer.MAX_VALUE); byte[] data = in.getBytes((int)length); assert data.length==length; return new StaticArrayBuffer(data); }
@Override public SpecialInt read(ScanBuffer buffer) { return new SpecialInt(buffer.getInt()); }
@Override public Byte read(ScanBuffer buffer) { return (byte) (buffer.getByte() + Byte.MIN_VALUE); }
@Override public BigDecimal read(ScanBuffer buffer) { BigInteger unscaledVal = bigIntegerDelegate.read(buffer); int scale = buffer.getInt(); return new BigDecimal(unscaledVal, scale); }
@Override public Object read(ScanBuffer buffer) { Preconditions.checkArgument(buffer.getByte()==1,"Invalid serialization state"); return new Object(); }
@Override public String readByteOrder(ScanBuffer buffer) { byte prefix = buffer.getByte(); if (prefix==-1) return null; assert prefix==0; StringBuilder s = new StringBuilder(); while (true) { char c = cs.readByteOrder(buffer); if (((int) c) > 0) s.append(c); else break; } return s.toString(); }
@Override public Boolean read(ScanBuffer buffer) { return decode(buffer.getByte()); }
StringBuilder sb = new StringBuilder(); while (true) { int c = 0xFF & buffer.getByte(); sb.append((char)(c & 0x7F)); if ((c & 0x80) > 0) break; StringBuilder sb = new StringBuilder((int)length); for (int i = 0; i < length; i++) { int b = buffer.getByte() & 0xFF; switch (b >> 4) { case 0: case 12: case 13: sb.append((char)((b & 0x1F) << 6 | buffer.getByte() & 0x3F)); break; case 14: sb.append((char)((b & 0x0F) << 12 | (buffer.getByte() & 0x3F) << 6 | buffer.getByte() & 0x3F)); break;
@Override public boolean[] read(ScanBuffer buffer) { int length = getLength(buffer); if (length<0) return null; boolean[] result = new boolean[length]; int b = 0; for (int i = 0; i < length; i++) { int offset = i%8; if (offset==0) { b= 0xFF & buffer.getByte(); } result[i]=BooleanSerializer.decode((byte)((b>>>(7-offset))&1)); } return result; }
private <T> T readObjectInternal(ScanBuffer buffer, Class<T> type, boolean byteOrder) { if (supportsNullSerialization(type)) { AttributeSerializer<T> s = getSerializer(type); if (byteOrder) return ensureOrderPreserving(s,type).readByteOrder(buffer); else return s.read(buffer); } else { //Read flag for null or not byte flag = buffer.getByte(); if (flag==-1) { return null; } else { Preconditions.checkArgument(flag==0,"Invalid flag encountered in serialization: %s. Corrupted data.",flag); return readObjectNotNullInternal(buffer,type,byteOrder); } } }