@Override
  public void onNewData(ByteBuffer decompressed) {
    long timestamp = decompressed.getLong();
    LongBuffer data = decompressed.asLongBuffer();

    for (int i = 0; i < variables.size(); i++) {
      YoVariable<?> variable = variables.get(i);
      long previousValue = variable.getValueAsLongBits();
      long newValue = data.get();
      variable.setValueFromLongBits(newValue, false);
      if (previousValue != newValue) {
        ArrayList<VariableChangedListener> changedListeners =
            variable.getVariableChangedListeners();
        if (changedListeners != null) {
          for (int listener = 0; listener < changedListeners.size(); listener++) {
            VariableChangedListener changedListener = changedListeners.get(listener);
            if (!(changedListener instanceof LogControlVariableChangeListener)) {
              changedListener.variableChanged(variable);
            }
          }
        }
      }
    }

    for (int i = 0; i < jointStates.size(); i++) {
      jointStates.get(i).update(data);
    }

    listener.receivedTimestampAndData(timestamp, decompressed);
  }