package be.nikiroo.utils;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
+import be.nikiroo.utils.streams.MarkableFileInputStream;
+
/**
* A generic cache system, with special support for {@link URL}s.
* <p>
if (cached.exists() && cached.isFile()
&& (allowTooOld || !isOld(cached, stable))) {
try {
- return new MarkableFileInputStream(new FileInputStream(cached));
+ return new MarkableFileInputStream(cached);
} catch (FileNotFoundException e) {
return null;
}
* @param uniqueID
* a unique ID used to locate the cached resource
*
+ * @return the number of bytes written
+ *
* @throws IOException
* in case of I/O error
*/
- public void save(InputStream in, String uniqueID) throws IOException {
+ public long save(InputStream in, String uniqueID) throws IOException {
File cached = getCached(uniqueID);
cached.getParentFile().mkdirs();
- save(in, cached);
+ return save(in, cached);
}
/**
* @param url
* the {@link URL} used to locate the cached resource
*
+ * @return the number of bytes written
+ *
* @throws IOException
* in case of I/O error
*/
- public void save(InputStream in, URL url) throws IOException {
+ public long save(InputStream in, URL url) throws IOException {
File cached = getCached(url);
- save(in, cached);
+ return save(in, cached);
}
/**
* @param cached
* the cached {@link File} to save to
*
+ * @return the number of bytes written
+ *
* @throws IOException
* in case of I/O error
*/
- private void save(InputStream in, File cached) throws IOException {
+ private long save(InputStream in, File cached) throws IOException {
+ // We want to force at least an immediate SAVE/LOAD to work for some
+ // workflows, even if we don't accept cached files (times set to "0"
+ // -- and not "-1" or a positive value)
clean(true, dir, 10);
- IOUtils.write(in, cached);
+ cached.getParentFile().mkdirs(); // in case we deleted our own parent
+ long bytes = IOUtils.write(in, cached);
+ return bytes;
}
/**