/** * {@inheritDoc} */ @Override public int available() throws IOException { if (length == -1) { long remaining = queue.remaining(); return remaining > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) remaining; } else { return pos >= length ? -1 : length - pos; } }
private String read(ByteBufferQueue queue) { ByteBuffer buf = ByteBuffer.allocate((int) queue.remaining()); queue.get(buf); buf.flip(); StringBuilder r = new StringBuilder(buf.remaining()); while (buf.hasRemaining()) { r.append((char) buf.get()); } return r.toString(); }
/** * {@inheritDoc} */ @Override public final void write(Command cmd, boolean last) throws IOException { ByteBufferQueueOutputStream bqos = new ByteBufferQueueOutputStream(sendStaging); ObjectOutputStream oos = AnonymousClassWarnings.checkingObjectOutputStream(bqos); try { cmd.writeTo(channel, oos); } finally { oos.close(); } long remaining = sendStaging.remaining(); channel.notifyWrite(cmd, remaining); while (remaining > 0L) { int frame = remaining > transportFrameSize ? transportFrameSize : (int) remaining; // # of bytes we send in this chunk writeChunkHeader.clear(); ChunkHeader.write(writeChunkHeader, frame, remaining > transportFrameSize); writeChunkHeader.flip(); writeChunkBody.clear(); writeChunkBody.limit(frame); sendStaging.get(writeChunkBody); writeChunkBody.flip(); write(writeChunkHeader, writeChunkBody); remaining -= frame; } }