protected int allocateSpace() { int spaceLeft = currentWriteChunk.spaceLeft(); if (spaceLeft == 0) { chunks.add(currentWriteChunk); totalBytesUnreadInList += currentWriteChunk.bytesUnread(); currentWriteChunk = new StreamByteBufferChunk(chunkSize); spaceLeft = currentWriteChunk.spaceLeft(); } return spaceLeft; }
public int totalBytesUnread() { int total = 0; if (readMode == ReadMode.REMOVE_AFTER_READING) { total = totalBytesUnreadInList; } else if (readMode == ReadMode.RETAIN_AFTER_READING) { prepareRetainAfterReading(); total = totalBytesUnreadInIterator; } if (currentReadChunk != null) { total += currentReadChunk.bytesUnread(); } if (currentWriteChunk != currentReadChunk && currentWriteChunk != null) { if (readMode == ReadMode.REMOVE_AFTER_READING) { total += currentWriteChunk.bytesUnread(); } else if (readMode == ReadMode.RETAIN_AFTER_READING) { total += currentWriteChunk.bytesUsed(); } } return total; }
protected int prepareRead() { prepareRetainAfterReading(); int bytesUnread = (currentReadChunk != null) ? currentReadChunk.bytesUnread() : 0; if (bytesUnread == 0) { if (readMode == ReadMode.REMOVE_AFTER_READING && !chunks.isEmpty()) { currentReadChunk = chunks.removeFirst(); bytesUnread = currentReadChunk.bytesUnread(); totalBytesUnreadInList -= bytesUnread; } else if (readMode == ReadMode.RETAIN_AFTER_READING && readIterator.hasNext()) { currentReadChunk = readIterator.next(); currentReadChunk.reset(); bytesUnread = currentReadChunk.bytesUnread(); totalBytesUnreadInIterator -= bytesUnread; } else if (currentReadChunk != currentWriteChunk) { currentReadChunk = currentWriteChunk; bytesUnread = currentReadChunk.bytesUnread(); } else { bytesUnread = -1; } } return bytesUnread; }