是否可以从 Android API 随机访问写入 Google 驱动器文件?

Is it possible to have random access writes to a Google Drive file from the Android API?

我正在尝试使用 Android API 在 Google 驱动器中录制音频并创建一个 wav 文件。我有第一遍,我用 0 字节的文件长度写入 header,因为我不知道录制的音频会有多长时间,我不想将它全部保存在内存中。记录完成后,我返回字节 4 并写入文件的长度。

这在使用 RandomAccessFile 时效果很好,但我不知道如何使用 Google 驱动器 API 来做某事。 https://developers.google.com/drive/android/files

DriveContents class (https://developers.google.com/android/reference/com/google/android/gms/drive/DriveContents) 没有暗示以任何方式在内容中查找。有什么想法吗?

我认为这种方式不可能。 Google 驱动器 Apis (V2, V3, GDAA) 都接受 file streams(即串行流)作为内容。您可能知道构建元数据 + 内容并上传(创建、修补、更新)。

由于您需要在完成写入文件后修改 your file's header,唯一的方法是在本地文件中完成所有内容,然后将其流式传输到 GooDrive Api.在这种情况下,update/patch 对您没有帮助,因为您的 header 是 GooDrive Apis 已知为 contents.

的一大块字节的一部分

这是合乎逻辑的,V2 和 V3 是直接的 REST api,所以它们以串行方式向上发送字节。有希望 GDAA 有朝一日可以做到这一点(参见“Lifecycle of a Drive file”),但我不会屏住呼吸。

尝试使用 FileChannel 进行随机访问。

您可以通过FileOutputStream#getChannel获取FileChannel,然后通过FileChannel#position(long)进行seek。 然后从设置的位置开始写入OutputStream。

注意:我建议在访问 FileChannel 之前刷新 OutputStream。