private boolean processDone(ByteBuffer b, BufferInfo info) {

		int remain = b.remaining();
		int cacheSpace = info.getNumNeededBytes();
		int sizeToCopy = cacheSpace;
		
		if(remain <= 0)
			return info.isHaveData();
		
		if(remain < cacheSpace)
			sizeToCopy = remain;
		
		byte[] dst = info.getCache().array();
		
		if(sizeToCopy > 0) {
			info.setNumNeededBytes(info.getNumNeededBytes() - sizeToCopy);
			b.get(dst, info.getIndex(), sizeToCopy);
			int curPos = info.getCache().position();
			info.getCache().position(curPos+sizeToCopy);
			info.setIndex(info.getIndex() + sizeToCopy);
		}
		
		if(info.getNumNeededBytes() <= 0) {
			return true;
		}
		
		return false;
	}