在指定字节数后停止读取输入流

问题描述 投票:0回答:1

有没有办法将输入流分成块?例如,我正在向 BodyPublisher 发送输入流,我希望 BodyPublisher 读取输入流的子集并停止,然后下一次迭代将读取输入流中的下一组字节。

我想问这个问题的另一种方式是,是否有一个输入流可以包装另一个输入流并在指定的字节数后返回流结尾?

它可能看起来像:

InputStream is = // my inputstream
while (bytesRead < numBytes) {
   SubsetInputStream subsetIs = new SubsetInputStream(is, chunkSize);
   ...
   .POST(HttpRequest.BodyPublishers.ofInputStream(() -> subsetIs));
   ...
   bytesRead += chunkSize;
}
java inputstream
1个回答
0
投票

您可以读入一个字节数组并从中创建一个

ByteArrayInputStream

var chunk = new byte[chunkSize];
while (true) {
    int read = is.read(chunk);
    if (read == -1) break;
    var bais = new ByteArrayInputStream(chunk, 0, read);
    // use the ByteArrayInputStream
}
© www.soinside.com 2019 - 2024. All rights reserved.