@Override
			public synchronized Object get() {
				try {
					if (_oin == null) {
						var in = resources.use(input);
						if (!(in instanceof BufferedInputStream)) {
							in = resources.use(new BufferedInputStream(in));
						}
						_oin = resources.use(new ObjectInputStream(in));
					}

					return _oin.readObject();
				} catch (EOFException|ClassNotFoundException e) {
					return null;
				} catch (IOException e) {
					throw new UncheckedIOException(e);
				}
			}
Reads the objects from the given {@code input} stream, which were
previously written with one of the {@code write} methods.
The content is read lazily, object after object, and allows to read many
objects efficiently. Note that the caller is responsible for closing the
returned object stream, which also closes the given {@code input} stream.
{@snippet lang="java":
final InputStream input = ...;
try (Stream<Object> stream = Serializer.objects(input)) {
    stream.forEach(System.out::println);
}
}

@see #objects(Path)

@param input the input stream where the objects are read from
@return a stream of the read objects
@throws NullPointerException if the given {@code input} stream is
        {@code null}
jenetics.incubator/src/main/java/io/jenetics/incubator/util/Serializer.java