protected byte[] getRawVPack() { return Arrays.copyOfRange(vpack, start, start + getByteSize()); }
public Message(final long id, final byte[] chunkBuffer) throws BufferUnderflowException, IndexOutOfBoundsException { super(); this.id = id; head = new VPackSlice(chunkBuffer); final int headSize = head.getByteSize(); if (chunkBuffer.length > headSize) { body = new VPackSlice(chunkBuffer, headSize); } else { body = null; } }
private HttpRequestBase requestWithBody(final HttpEntityEnclosingRequestBase httpRequest, final Request request) { final VPackSlice body = request.getBody(); if (body != null) { if (contentType == Protocol.HTTP_VPACK) { httpRequest.setEntity(new ByteArrayEntity( Arrays.copyOfRange(body.getBuffer(), body.getStart(), body.getStart() + body.getByteSize()), CONTENT_TYPE_VPACK)); } else { httpRequest.setEntity(new StringEntity(body.toString(), CONTENT_TYPE_APPLICATION_JSON_UTF8)); } } return httpRequest; }
protected Collection<Chunk> buildChunks(final Message message) { final Collection<Chunk> chunks = new ArrayList<Chunk>(); final VPackSlice head = message.getHead(); int size = head.getByteSize(); final VPackSlice body = message.getBody(); if (body != null) { size += body.getByteSize(); } final int n = size / chunksize; final int numberOfChunks = (size % chunksize != 0) ? (n + 1) : n; int off = 0; for (int i = 0; size > 0; i++) { final int len = Math.min(chunksize, size); final long messageLength = (i == 0 && numberOfChunks > 1) ? size : -1L; final Chunk chunk = new Chunk(message.getId(), i, numberOfChunks, messageLength, off, len); size -= len; off += len; chunks.add(chunk); } return chunks; }
if (position <= size && current != 0) { current += getCurrent().getByteSize(); current += getCurrent().getByteSize(); } else { throw new NoSuchElementException();
@Override public VPackSlice getValue() { return new VPackSlice(currentField.getBuffer(), currentField.getStart() + currentField.getByteSize()); }
@SuppressWarnings("unchecked") @Override public <T> T deserialize(final VPackSlice vpack, final Type type) throws ArangoDBException { try { final T doc; if (type == String.class && !vpack.isString()) { final JsonNode node = vpackMapper.readTree( Arrays.copyOfRange(vpack.getBuffer(), vpack.getStart(), vpack.getStart() + vpack.getByteSize())); doc = (T) jsonMapper.writeValueAsString(node); } else { doc = vpackMapper.readValue(vpack.getBuffer(), vpack.getStart(), vpack.getStart() + vpack.getByteSize(), (Class<T>) type); } return doc; } catch (final IOException e) { throw new ArangoDBException(e); } }
public VPackSlice valueAt(final int index) { if (!isObject()) { throw new VPackValueTypeException(ValueType.OBJECT); } final VPackSlice key = getNthKey(index); return new VPackSlice(vpack, key.start + key.getByteSize()); }
protected synchronized void writeIntern(final Message message, final Collection<Chunk> chunks) throws ArangoDBException { for (final Chunk chunk : chunks) { try { if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("Send chunk %s:%s from message %s", chunk.getChunk(), chunk.isFirstChunk() ? 1 : 0, chunk.getMessageId())); } writeChunkHead(chunk); final int contentOffset = chunk.getContentOffset(); final int contentLength = chunk.getContentLength(); final VPackSlice head = message.getHead(); final int headLength = head.getByteSize(); int written = 0; if (contentOffset < headLength) { written = Math.min(contentLength, headLength - contentOffset); outputStream.write(head.getBuffer(), contentOffset, written); } if (written < contentLength) { final VPackSlice body = message.getBody(); outputStream.write(body.getBuffer(), contentOffset + written - headLength, contentLength - written); } outputStream.flush(); } catch (final IOException e) { throw new ArangoDBException(e); } } }
/** * @return the offset for the nth member from a compact Array or Object type */ private int getNthOffsetFromCompact(final int index) { final long end = NumberUtil.readVariableValueLength(vpack, start + 1, false); final long n = NumberUtil.readVariableValueLength(vpack, (int) (start + end - 1), true); if (index >= n) { throw new IndexOutOfBoundsException(); } final byte head = head(); long offset = 1 + NumberUtil.getVariableValueLength(end); long current = 0; while (current != index) { final long byteSize = new VPackSlice(vpack, (int) (start + offset)).getByteSize(); offset += byteSize; if (head == 0x14) { offset += byteSize; } ++current; } return (int) offset; }
@Override public byte[] getBinaryValue(final Base64Variant b64variant) throws IOException { if (currentValue.isBinary()) { return currentValue.getAsBinary(); } else if (currentValue.isString()) { return b64variant.decode(currentValue.getAsString()); } return Arrays.copyOfRange(currentValue.getBuffer(), currentValue.getStart(), currentValue.getStart() + currentValue.getByteSize()); }
n = (end - dataOffset) / first.getByteSize(); } else if (offsetsize < 8) { n = NumberUtil.toLong(vpack, start + 1 + offsetsize, offsetsize); dataOffset = findDataOffset(); offset = dataOffset + index * new VPackSlice(vpack, start + dataOffset).getByteSize(); } else { final long ieBase = end - n * offsetsize + index * offsetsize - (offsetsize == 8 ? 8 : 0);
result = new VPackSlice(vpack, key.start + key.getByteSize()); break;
result = new VPackSlice(vpack, key.start + key.getByteSize()); break;
length = (end - dataOffset) / first.getByteSize(); } else if (offsetsize < 8) { length = NumberUtil.toLong(vpack, start + 1 + offsetsize, offsetsize);
result = new VPackSlice(vpack, key.start + key.getByteSize()); } else { result = new VPackSlice(vpack, key.start + key.getByteSize()); } else {