@Override
		public final SongDataEntry parse(final byte[] bytes) throws IOException {
			// TODO read as written to restore data
			final InputStream is = new ByteArrayInputStream(bytes);
			final Map<Integer, String> voices;
			final int idDir = is.read();
			final String name = read(is);

			Path dir = Deserializer_0.this.idMapIn.get(idDir);
			if (dir == null) {
				synchronized (Deserializer_0.this.idMapIn) {
					while ((dir = Deserializer_0.this.idMapIn.get(idDir)) == null) {
						try {
							Deserializer_0.this.idMapIn.wait();
						} catch (final InterruptedException e) {
							return null;
						}
					}

				}
			}
			final Path path = dir.resolve(name);
			if (!path.exists()) // file deleted -> info not needed
			{
				Debug.print(path + " not existing");
				return null;
			}
			final long mod = readMod(is);
			if (path.toFile().lastModified() != mod) // file edited -> info not
														// needed
			{
				Debug.print(path + " changed");
				return null;
			}
			voices = SongData.readExternal(is, this);
			return new SongDataEntry(path, voices, mod);
		}