@Override
	protected void deserialize_() throws IOException {
		if (this.in == null) {
			return;
		}
		this.io.startProgress("Reading data base of previous run", -1); // init
		this.in.registerProgressMonitor(this.io);
		this.io.setProgressTitle("Reading data base of previous run"); // set
																		// message
		this.in.read(); // version byte

		final byte[] modField = new byte[Long.SIZE / 8];
		final byte[] intField = new byte[Integer.SIZE / 8];
		final byte[] idxField = new byte[Short.SIZE / 8];
		final ByteBuffer modBuffer = ByteBuffer.wrap(modField);
		final ByteBuffer intBuffer = ByteBuffer.wrap(intField);
		final ByteBuffer idxBuffer = ByteBuffer.wrap(idxField);
		final ByteBuffer nameBuffer = ByteBuffer.allocate(600);
		final DirTree tree = this.sdc.getDirTree();
		while (!this.in.EOFreached()) {
			if (Thread.currentThread().isInterrupted()) {
				return;
			}
			final boolean ext = readUntilSep(nameBuffer);
			final String name = new String(nameBuffer.array(), 0,
					nameBuffer.position());

			this.in.read(modField);
			modBuffer.position(0);
			final long mod;
			final Map<Integer, String> voices;
			if (ext) {
				mod = modBuffer.getLong();
				this.in.read(intField);
				intBuffer.position(0);
				voices = new HashMap<>(intBuffer.getInt());

				boolean end = false;
				do {
					this.in.read(intField);
					intBuffer.position(0);
					@SuppressWarnings("hiding")
					final int idx = intBuffer.getInt();
					end = readUntilSep(nameBuffer);
					final String desc = new String(nameBuffer.array(), 0,
							nameBuffer.position());
					voices.put(idx, desc);
				} while (!end);
			} else {
				final int voicesCount;
				voicesCount = modBuffer.getChar();
				modBuffer.position(0);
				modBuffer.putChar((char) 0);
				modBuffer.position(0);
				mod = modBuffer.getLong();
				voices = new HashMap<>(voicesCount);
				for (int i = 0; i < voicesCount; i++) {
					this.in.read(idxField);
					idxBuffer.position(0);
					@SuppressWarnings("hiding")
					final int idx = idxBuffer.getShort();
					final String desc = new String(
							this.in.readTo(Deserializer_3.SEPERATOR_3));
					voices.put(idx, desc);
				}
			}
			final Path p = this.root.resolve(name.split("/"));
			if (p.exists()) {
				tree.put(new SongDataEntry(p, voices, mod));
			}
		}
		this.io.close(this.in);
		this.inFile.delete();
	}