Записать в файл из CacheDataSource - PullRequest
0 голосов
/ 12 января 2020

Я довольно новичок в exoplayer, поэтому приношу свои извинения, если это новый вопрос ie.

Я пытаюсь использовать CacheDataSource для чтения данных из кэша, добавить его к данным, которые не являются все же кэшируем и записываем их в файл.

Мой код выглядит примерно так:

byte[] buffer = new byte[length];

DefaultHttpDataSource ds = new DefaultHttpDataSource(userAgent);

CacheDataSource dataSource = new CacheDataSource(cache, ds);

dataSource.open(new DataSpec(uri, 0, length, key));

dataSource.read(buffer,0, buffer.length)

dataSource.close();

ds.close();

FileOutputStream fos= new FileOutputStream(path);

fos.write(buffer);

fos.close();

Однако в файл записываются только кэшированные части потока.

  • uri указывает на mp3-файл на s3.
  • length - длина источника в байтах
  • key - индекс кэша

ОБНОВЛЕНИЕ:

Оказывается, что-то вроде этого работает отлично:

byte[] buffer = new byte[1024];

DefaultHttpDataSource ds = new DefaultHttpDataSource(userAgent);

CacheDataSource dataSource = new CacheDataSource(cache, ds);

dataSource.open(new DataSpec(uri, 0, length, key));

FileOutputStream fos = new FileOutputStream(path);

int read = 0;

while( (read = dataSource.read(buffer,0, buffer.length)) > 0) {

       fos.write(buffer, 0, read);

      }

dataSource.close();

ds.close();

fos.close();

Теперь мой вопрос: почему не работает весь поток ответов в байтовом массиве? Я что-то упускаю здесь очевидное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...