use of suite.primitive.Bytes in project suite by stupidsing.
the class StoreCache method getOutlet.
public Outlet<Bytes> getOutlet(Bytes key, Source<Outlet<Bytes>> source) {
return Rethrow.ex(() -> {
long current = System.currentTimeMillis();
Path path;
int i = 0;
while (Files.exists(path = path(key, i++, ""))) if (isUpToDate(path, current)) {
InputStream is = Files.newInputStream(path);
DataInputStream dis = new DataInputStream(is);
if (isMatch(key, dis))
return read(dis).closeAtEnd(is);
dis.close();
is.close();
} else {
Files.delete(path);
break;
}
Pair<Boolean, Path> pair = match(key);
if (pair.t0) {
InputStream vis = Files.newInputStream(pair.t1);
DataInputStream vdis = new DataInputStream(vis);
return read(vdis).closeAtEnd(vis);
} else {
Outlet<Bytes> outlet = source.source();
OutputStream vos = FileUtil.out(pair.t1);
DataOutput_ vdo = DataOutput_.of(vos);
return //
Outlet.of(() -> Rethrow.ex(() -> {
Bytes value = outlet.next();
if (value != null)
vdo.writeBytes(value);
return value;
})).closeAtEnd(//
vos).closeAtEnd(vdo);
}
});
}
Aggregations