code: public static <E extends Blob> E retrieveFromStream(String id, InputStream inputStream, Class<E> clazz)
  			throws IOException {
  		logger.debug("trying to retrieve from Stream. id = {}, class = {}", id, clazz);
  
  		DataInputStream dataInputStream = new DataInputStream(inputStream);
  
  		byte binaryVersion = dataInputStream.readByte();
  
  		String compression;
  		String type;
  		long contentLength;
  		if (binaryVersion >= 1) {
  			type = dataInputStream.readUTF();
  			compression = dataInputStream.readUTF();
  			contentLength = dataInputStream.readLong();
  		} else {
  			throw new IllegalStateException("Unsupported binary version <" + binaryVersion + ">");
  		}
  
  		logger.debug(String.format("retrieving item from Stream. type = %s, compression = %s, content-length = %d (%s)",
  				type, compression, contentLength, FileSizeFormatter.formateBytes(contentLength, 1)));
  
  		Compressor compressor = CompressorFactory.getCompressor(compression);
  		InputStream contentStream = compressor.decompress(dataInputStream);
  
  		try {
  			Constructor<E> constructor = clazz.getDeclaredConstructor(String.class, String.class, InputStream.class,
  					Long.class);
  			return constructor.newInstance(new Object[] { id, compression, contentStream, contentLength });
  		} catch (Exception e) {
  			throw new RuntimeException(e);
  		}
  	}
docs: Erzeugt aus einem Roh-Stream (d.h. mit Header und ggf. Kompression) ein passendes Blob-Objekt. Wenn das Blob vom
  Typ <i>BLOB, DIR oder BLUEPRINT</i> ist, so wird eine korrekte Instanz der entsprechenden Klasse zurückgegeben.
  
  @param id
  Id, unter der das gewünschte Blob abgelegt wurde
  @return Blob-Objekt (z.B. Directory oder Blueprint)
  @throws IdNotFoundException
  falls unter <code>id</code> kein Blob abgelegt ist
  @throws IOException