Возможно ли иметь произвольный доступ для записи в файл Google Диска из Android API?

Я пытаюсь записать звук и создать wav-файл на Google Диске с помощью Android API. У меня есть первый проход, где я пишу заголовок с длиной файла 0 байт, потому что я не знаю, какой длины будет записанный звук, и я не хочу хранить все это в памяти. Как только запись закончена, я возвращаюсь к байту 4 и записываю длину файла.

Это прекрасно работает при использовании RandomAccessFile, но я не могу понять, как что-то сделать с помощью API Google Диска. https://developers.google.com/drive/android/files

Класс DriveContents (https://developers.google.com/android/reference/com/google/android/gms/drive/DriveContents) не указывает ни на какой способ поиска по содержимому. Любые идеи?


person astromme    schedule 29.12.2015    source источник


Ответы (2)


Я не думаю, что это будет возможно таким образом. API Google Диска (V2, V3, GDAA) все принимают file streams (т. е. последовательные потоки) в качестве содержимого. Вы, наверное, знаете, что вы создаете метаданные + содержимое и загружаете (создаете, исправляете, обновляете).

Поскольку вам нужно изменить your file's header после того, как вы закончите запись в файл, единственный способ сделать это — закончить все в локальном файле, а затем передать его поток в API GooDrive. Обновление/патч в этом случае вам не поможет, так как ваш заголовок является частью куска байтов, известного GooDrive Apis как contents.

Это логично, V2 и V3 являются прямыми API REST, поэтому они отправляют байты последовательно. Есть надежда, что когда-нибудь GDAA сможет это сделать (см. 'Жизненный цикл файла на Диске'. ), но я бы не стал задерживать дыхание.

Удачи

person seanpj    schedule 29.12.2015

Попробуйте использовать FileChannel для произвольного доступа.

Вы можете получить FileChannel с помощью FileOutputStream#getChannel, а затем выполнить поиск с помощью FileChannel#position(long). Затем запись в OutputStream начнется с установленной позиции.

Примечание. Я бы посоветовал очистить OutputStream перед доступом к FileChannel.

person Anatoli    schedule 30.12.2015