diff options
author | jonmv <venstad@gmail.com> | 2022-11-05 09:24:21 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-11-07 09:59:27 +0100 |
commit | f8a4549269d9df145a4f27c5368a2578f18128a7 (patch) | |
tree | ee802d429172bbb301221a1dea2fe48a34bed9b6 /vespajlib/src/main/java/com/yahoo/io/LazyInputStream.java | |
parent | a2eca5f54c45838d072f9641505baa3ae0d26746 (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/LazyInputStream.java')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/io/LazyInputStream.java | 53 |
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(); } + +} |