コード例 #1
0
 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;
 }
コード例 #2
0
 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;
 }
コード例 #3
0
 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;
 }