public void archiveResponse(Data data) {
		synchronized (this) {
			// aus den Daten das byte-Array anfordern. In dem Array sind die Informationen,
			// ob die Infoanfrage geklappt hat, gespeichert
			byte[] requestInfoResponse = data.getUnscaledArray("daten").getByteArray();

			InputStream in = new ByteArrayInputStream(requestInfoResponse);

			//deserialisieren
			Deserializer deserializer = SerializingFactory.createDeserializer(in);

			// Das erste byte bestimmt, ob die Anfrage geklappt hat. 0 = nein; 1 = ja
			try {
				final byte requestSuccessfulFlag = deserializer.readByte();

				if (requestSuccessfulFlag == 0) {
					_requestSuccessful = false;
				} else {
					_requestSuccessful = true;
				}

				if (_requestSuccessful == true) {
					// Die Infoanfrage konnte bearbeitet werden

					// Das Antwortobjekt erzeugen

					// Der erste Wert ist ein int, er bestimmt wieviele Objekte serialisiert wurde
					final int numberOfData = deserializer.readInt();
					for (int nr = 0; nr < numberOfData; nr++) {
						//Folgende Werte werden eingelesen
						// 1) intervalStart (long)
						// 2) intervalEnd (long)
						// 3) timingType (byte)
						// 4) isDataGap (byte)
						// 5) directAccess (byte)
						// 6) volumeId (int)
						// 7) Zeiger auf ArchiveDataSpecification Eintrag (int)

						final long intervalStart = deserializer.readLong();
						final long intervalEnd = deserializer.readLong();
						final byte byteTimingType = deserializer.readByte();
						final TimingType timingType;


						if (byteTimingType == 1) {
							timingType = TimingType.DATA_TIME;
						} else if (byteTimingType == 2) {
							timingType = TimingType.ARCHIVE_TIME;
						} else {
							timingType = TimingType.DATA_INDEX;
						}

						final byte byteDataGap = deserializer.readByte();
						final boolean dataGap;
						if (byteDataGap == 0) {
							dataGap = false;
						} else {
							dataGap = true;
						}

						final byte byteDirectAccess = deserializer.readByte();
						final boolean directAccess;
						if (byteDirectAccess == 0) {
							directAccess = false;
						} else {
							directAccess = true;
						}

						final int volumeId = deserializer.readInt();

						// Die ArchiveDataSpec werden nicht übertragen, sondern nur ein Index auf welche ArchiveDataSpec
						// sich diese antwort bezieht, somit kann aus der Liste der ArchiveDataSpecs der richtige
						// ausgewählt werden.
						final int pointerArchiveDataSpec = deserializer.readInt();

						// Es wurden alle Infos eingelesen um ein ArchiveInformationResult Objekt zu erzeugen
						ArchiveInformationResult archiveInformationResult = new ArchiveInfoResult(intervalStart, intervalEnd, timingType, dataGap, directAccess, volumeId, _specs.get(pointerArchiveDataSpec));

						// Ergebnisliste
						_archiveInformationResults.add(archiveInformationResult);


					} // for

				} else {
					// Die Anfrage hat nicht funktioniert, den Fehler auslesen
					_errorMessage = deserializer.readString();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

			_lock = false;
			this.notifyAll();
		}
	}