public RelativeCombinedStream(final ArchiveDataStream[] streamsToCombine, ArchiveDataSpecification spec) {

			// Siehe de.bsvrz.ars.ars.mgmt.tasks.ArchiveQueryTask.Query.maxInterval
			long maxSize = Math.min(spec.getTimeSpec().getIntervalStart(), 16000);

			// Erstmal alle Stream wie gewohnt verketten
			ArchiveDataStream parent = new CombinedStream(streamsToCombine, spec);

			// dann alle Datensätze nacheinander in den (begrenzten) Puffer schieben
			// sodass am Schluss nur die aktuellsten Datensätze übrig bleiben
			_spec = spec;
			_buffer = new ArrayDeque<ArchiveData>();
			try {
				ArchiveData aData;
				int currentDataSets = 0;
				while((aData = parent.take()) != null){
					_buffer.addLast(aData);
					if(shouldCount(aData)){
						currentDataSets++;
					}
					while(currentDataSets > maxSize){
						ArchiveData first = _buffer.removeFirst();
						if(shouldCount(first)){
							currentDataSets--;
						}
						while(_buffer.peekFirst() != null && _buffer.peekFirst().getDataType() == DataState.POSSIBLE_GAP){
							// Potentielle Lücken am Anfang trimmen
							first = _buffer.removeFirst();
							if(shouldCount(first)){
								currentDataSets--;
							}
						}
					}
				}
			}
			catch(Exception e) {
				_exception = e;
			}
		}