summaryrefslogtreecommitdiffstats
path: root/hosted-api
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-11-03 17:18:05 +0100
committerjonmv <venstad@gmail.com>2022-11-03 17:18:05 +0100
commiteeebb065fa12b3afa2a8b7c25999b1bda28907a9 (patch)
treef741bb369f5316600229abcc0300c98c6915f569 /hosted-api
parentf4a66aa09b2ece9a3b284b2f2c11312bc29d6250 (diff)
Create multi-part streams lazily
Diffstat (limited to 'hosted-api')
-rw-r--r--hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java b/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java
index f1cbc027e17..c47fc60e58b 100644
--- a/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java
+++ b/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java
@@ -15,6 +15,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.List;
import java.util.UUID;
import java.util.function.Supplier;
@@ -89,10 +90,12 @@ public class MultiPartStreamer {
/** Returns an input stream which is an aggregate of all current parts in this, plus an end marker. */
public InputStream data() {
- InputStream aggregate = new SequenceInputStream(Collections.enumeration(Stream.concat(streams.stream().map(Supplier::get),
- Stream.of(end()))
- .collect(Collectors.toList())));
-
+ InputStream aggregate = new SequenceInputStream(new Enumeration<>() {
+ final int j = streams.size();
+ int i = -1;
+ @Override public boolean hasMoreElements() { return i < j; }
+ @Override public InputStream nextElement() { return ++i < j ? streams.get(i).get() : end(); }
+ });
try {
if (aggregate.skip(2) != 2)// This should never happen, as the first stream is a ByteArrayInputStream.
throw new IllegalStateException("Failed skipping extraneous bytes.");