private void readFigures() throws IOException { int numberOfFigures; Figure[] figuresMetadata; numberOfFigures = dis.readInt(); figuresMetadata = new Figure[numberOfFigures]; for (int i = 0; i < numberOfFigures; i++) { byte figureAttribute = dis.readByte(); int figurePointOffset = dis.readInt(); figuresMetadata[i] = new Figure(figureAttribute, figurePointOffset); } binary.setFigures(figuresMetadata); }
private void readShapes() throws IOException { int numberOfShapes; Shape[] shapesMetadata; numberOfShapes = dis.readInt(); shapesMetadata = new Shape[numberOfShapes]; for (int i = 0; i < numberOfShapes; i++) { int parentOffset = dis.readInt(); int figureOffset = dis.readInt(); int shapeType = dis.readByte(); shapesMetadata[i] = new Shape(parentOffset, figureOffset, shapeType); } binary.setShapes(shapesMetadata); }
ByteOrderDataInStream dis = new ByteOrderDataInStream(); dis.setInStream(new ByteArrayInStream(bytes)); byte byteOrder = dis.readByte();
protected Geometry readGeometry() throws IOException, ParseException { byte byteOrderWKB = dis.readByte();
private Geometry readGeometry() throws IOException, ParseException { byte byteOrder = dis.readByte();
private void parse(InStream is) throws IOException { dis.setInStream(is); dis.setOrder(ByteOrderValues.LITTLE_ENDIAN); binary.setSrid(dis.readInt()); byte version = dis.readByte(); if (version != 1) { throw new SqlServerBinaryParseException( "Unsupported version (only supports version 1): " + version); } binary.setSerializationProperties(dis.readByte()); readNumberOfPoints(); readCoordinates(); readZValues(); readMValues(); if (binary.isSinglePoint()) { binary.setFigures(new Figure[] {new Figure(1, 0)}); binary.setShapes(new Shape[] {new Shape(-1, 0, 2)}); } else if (binary.hasSingleLineSegment()) { binary.setFigures(new Figure[] {new Figure(1, 0)}); binary.setShapes(new Shape[] {new Shape(-1, 0, 1)}); } else { readFigures(); readShapes(); } }
/** * Read the first bytes of Geometry WKB. * @param bytes WKB Bytes * @return Geometry MetaData * @throws IOException If WKB meta is invalid (do not check the Geometry) */ public static GeometryMetaData getMetaDataFromWKB(byte[] bytes) throws IOException { ByteOrderDataInStream dis = new ByteOrderDataInStream(); dis.setInStream(new ByteArrayInStream(bytes)); // determine byte order byte byteOrderWKB = dis.readByte(); // always set byte order, since it may change from geometry to geometry int byteOrder = byteOrderWKB == WKBConstants.wkbNDR ? ByteOrderValues.LITTLE_ENDIAN : ByteOrderValues.BIG_ENDIAN; dis.setOrder(byteOrder); int typeInt = dis.readInt(); int geometryType = typeInt & 0xff; // determine if Z values are present boolean hasZ = (typeInt & 0x80000000) != 0; int inputDimension = hasZ ? 3 : 2; // determine if SRIDs are present boolean hasSRID = (typeInt & 0x20000000) != 0; int SRID = 0; if (hasSRID) { SRID = dis.readInt(); } return new GeometryMetaData(inputDimension, hasSRID, hasZ, geometryType, SRID); } }
byte byteOrderWKB = dis.readByte();