有没有办法将输入流分成块?例如,我正在向 BodyPublisher 发送输入流,我希望 BodyPublisher 读取输入流的子集并停止,然后下一次迭代将读取输入流中的下一组字节。
我想问这个问题的另一种方式是,是否有一个输入流可以包装另一个输入流并在指定的字节数后返回流结尾?
它可能看起来像:
InputStream is = // my inputstream
while (bytesRead < numBytes) {
SubsetInputStream subsetIs = new SubsetInputStream(is, chunkSize);
...
.POST(HttpRequest.BodyPublishers.ofInputStream(() -> subsetIs));
...
bytesRead += chunkSize;
}
您可以读入一个字节数组并从中创建一个
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
}