All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.davidmoten.rx.internal.operators.OnSubscribeInputStream Maven / Gradle / Ivy

package com.github.davidmoten.rx.internal.operators;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

import rx.Observer;
import rx.observables.SyncOnSubscribe;

public final class OnSubscribeInputStream extends SyncOnSubscribe {

    private final InputStream is;
    private final int size;

    public OnSubscribeInputStream(InputStream is, int size) {
        this.is = is;
        this.size = size;
    }

    @Override
    protected InputStream generateState() {
        return is;
    }

    @Override
    protected InputStream next(InputStream is, Observer observer) {
        byte[] buffer = new byte[size];
        try {
            int count = is.read(buffer);
            if (count == -1) {
                observer.onCompleted();
            }
            else if (count < size) {
                observer.onNext(Arrays.copyOf(buffer, count));
            }
            else {
                observer.onNext(buffer);
            }
        } catch (IOException e) {
            observer.onError(e);
        }
        return is;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy