Baixe e escreva um arquivo com Retrofit e RxJava

Estou baixando um arquivo pdf com modernização, do jeito que estou baixando é em blocos. Eu uso oContent-Range cabeçalho para obter um intervalo de bytes, então eu preciso escrever esses bytes em umfile o problema é a ordem de escrevê-los. Estou usando oflatMap() para retornar um observável para cada solicitação que deve ser feita para baixar o arquivo.

.flatMap(new Func1<Integer, Observable<Response>>() {
                @Override
                public Observable<Response> call(Integer offset) {
                    int end;

                    if (offset + BLOCK_SIZE > (contentLength - 1))
                        end = (int) contentLength - 1 - offset;

                    else
                        end = offset + BLOCK_SIZE;

                    String range = getResources().getString(R.string.range_format, offset, end);

                   return ApiAdapter.getApiService().downloadPDFBlock(range);
                }
            })

odownloadPDFBlock receba uma string que é necessária por um cabeçalho:Range: bytes=0-3999. Então eu uso a função de inscrição para escrever os bytes baixados

subscribe(new Subscriber<Response>() {
                @Override
                public void onCompleted() {
                    Log.i(LOG_TAG, file.getAbsolutePath());
                }

                @Override
                public void onError(Throwable e) {
                    e.printStackTrace();
                }

                @Override
                public void onNext(Response response) {
                    writeInCache(response);
                    }
                }
            });

Mas o problema é que o processo de escrita é desordenado. Por exemplo: se oRange: bytes=44959-53151 for baixado primeiro, esses serão os bytes que serão gravados primeiro no arquivo. Eu li sobreBlockingObserver mas não sei se isso poderia ser uma solução.

Eu espero que você possa me ajudar.

questionAnswers(1)

yourAnswerToTheQuestion