summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/io
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-11-05 09:24:21 +0100
committerjonmv <venstad@gmail.com>2022-11-07 09:59:27 +0100
commitf8a4549269d9df145a4f27c5368a2578f18128a7 (patch)
treeee802d429172bbb301221a1dea2fe48a34bed9b6 /vespajlib/src/main/java/com/yahoo/io
parenta2eca5f54c45838d072f9641505baa3ae0d26746 (diff)
Revert "Merge pull request #24763 from vespa-engine/jonmv/revert-streams"
This reverts commit 6d8bca79a1f600501290593ecd920eca0b237c78, reversing changes made to 36374eb2d3cc94c3792dd0a70963244abb6284b4.
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/io')
-rw-r--r--vespajlib/src/main/java/com/yahoo/io/LazyInputStream.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/io/LazyInputStream.java b/vespajlib/src/main/java/com/yahoo/io/LazyInputStream.java
new file mode 100644
index 00000000000..3ff7ada6b59
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/io/LazyInputStream.java
@@ -0,0 +1,53 @@
+package com.yahoo.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.function.Supplier;
+
+/**
+ * Input stream wrapping an input stream supplier, which doesn't have content yet at declaration time.
+ *
+ * @author jonmv
+ */
+public class LazyInputStream extends InputStream {
+
+ private Supplier<InputStream> source;
+ private InputStream delegate;
+
+ public LazyInputStream(Supplier<InputStream> source) {
+ this.source = source;
+ }
+
+ private InputStream in() {
+ if (delegate == null) {
+ delegate = source.get();
+ source = null;
+ }
+ return delegate;
+ }
+
+ @Override
+ public int read() throws IOException { return in().read(); }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException { return in().read(b, off, len); }
+
+ @Override
+ public long skip(long n) throws IOException { return in().skip(n); }
+
+ @Override
+ public int available() throws IOException { return in().available(); }
+
+ @Override
+ public void close() throws IOException { in().close(); }
+
+ @Override
+ public synchronized void mark(int readlimit) { in().mark(readlimit); }
+
+ @Override
+ public synchronized void reset() throws IOException { in().reset(); }
+
+ @Override
+ public boolean markSupported() { return in().markSupported(); }
+
+}