import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
import java.nio.charset.StandardCharsets;
import java.util.Deque;
import org.opendaylight.restconf.openapi.jaxrs.OpenApiBodyWriter;
private final OpenApiBodyWriter writer;
private Reader reader;
+ private ReadableByteChannel channel;
public SchemaStream(final Deque<SchemaEntity> schemas, final OpenApiBodyWriter writer) {
this.stack = schemas;
@Override
public int read(final byte[] array, final int off, final int len) throws IOException {
- return super.read(array, off, len);
+ if (channel == null) {
+ if (stack.isEmpty()) {
+ return -1;
+ }
+ channel = Channels.newChannel(new ByteArrayInputStream(writeNextEntity(stack.pop())));
+ }
+
+ var read = channel.read(ByteBuffer.wrap(array, off, len));
+ while (read == -1) {
+ if (stack.isEmpty()) {
+ return -1;
+ }
+ channel = Channels.newChannel(new ByteArrayInputStream(writeNextEntity(stack.pop())));
+ read = channel.read(ByteBuffer.wrap(array, off, len));
+ }
+
+ return read;
}
private byte[] writeNextEntity(final OpenApiEntity entity) throws IOException {