public ReadableBuilder append(byte[] bytes, int offset, int length) { if (partsCount + 1 >= parts.length) increaseSize(); parts[partsCount] = new ReadableByteArray(bytes, offset, length); partsCount++; return this; }
@Override public long remains() { long l = 0; ReadableData[] parts = this.parts; for (int i = partsCount - 1; i >= 0; i--) { if (parts[i].isComplete()) break; l += parts[i].remains(); } return l; }
@Override public long length() { long l = 0; ReadableData[] parts = this.parts; int partsCount = this.partsCount; for (int i = 0; i < partsCount; i++) { l += parts[i].length(); } return l; }
@Override public long complete() { long l = 0; ReadableData[] parts = this.parts; int position = this.position; for (int i = 0; i <= position; i++) { ReadableData part = parts[i]; if (parts[i].isComplete()) l += parts[i].length(); else l += part.complete(); } return l; }
@Override public boolean isComplete() { return position == partsCount - 1 && parts[position].isComplete(); }
public ReadableBuilder(byte[] bytes, int offset, int length) { this(new ReadableByteArray(bytes, offset, length)); }
public ReadableData toReadableData() { ReadableBuilder builder = new ReadableBuilder(); if (id != null) builder.append(idPrefix).append(id.getBytes(StandardCharsets.UTF_8)).append(lineSeparator); if (event != null) builder.append(eventPrefix).append(event.getBytes(StandardCharsets.UTF_8)).append(lineSeparator); if (data != null) builder.append(dataPrefix).append(data.getBytes(StandardCharsets.UTF_8)).append(lineSeparator); builder.append(lineSeparator); return builder; }
public ReadableBuilder append(byte[] bytes) { return append(bytes, 0, bytes.length); }
@Override public void close() throws IOException { ReadableData[] parts = this.parts; int partsCount = this.partsCount; for (int i = 0; i < partsCount; i++) { parts[i].close(); } }
@Override public int read(ByteBuffer byteBuffer) { if (size.isComplete()) return super.read(byteBuffer); int r = size.read(byteBuffer); if (!size.isComplete()) return r; return r + super.read(byteBuffer); }
public ReadableByteBuffer subBuffer(int offset) { return subBuffer(offset, end - offset); }
public ReadableByteBuffer copy() { return new ReadableByteBuffer(buffer); }
public ReadableBuilder append(ReadableData readableData) { if (partsCount + 1 >= parts.length) increaseSize(); parts[partsCount] = readableData; partsCount++; return this; }
@Override public ByteBufferWrapper getByteBuffer(ByteBufferProvider bufferProvider) { return parts[position].getByteBuffer(bufferProvider); }
public long contentLength() { return body != null ? body.length() : 0; }
public void send(ReadableData readableData) { ReadableData peek = sending.peek(); if (peek != null) { ((ReadableBuilder) peek).append(readableData); } else sending.add(readableData); }