1   package com.atlassian.core.spool;
2   
3   import java.io.IOException;
4   import java.io.InputStream;
5   /**
6    * Class that implement this interface will spool data from the provided InputStream, and return a new InputStream
7    * to the spooled data. This is useful in situations when data must be staged between sources due to differences
8    * in IO speeds and resource expenses (for example streaming JDBC blobs from databases to web clients)
9    */
10  public interface Spool
11  {
12  	/**
13  	 * Return a new InputStream to the data provided. Implementations <strong>should</strong> guarantee that the
14       * returned input stream is independent of the stream passed in. For example, the returned InputStream should still
15       * be useable once the original InputStream is closed and its associated resources are released.
16  	 * 
17  	 * @param streamToSpool - Source stream to be spooled
18  	 * @return Spooled stream
19  	 * @throws IOException
20  	 */
21  	InputStream spool(InputStream streamToSpool) throws IOException;
22  	
23  }