libaums - 如果驱动器未卸载,复制到 USB 驱动器或从 USB 驱动器复制的文件是否会损坏?

libaums - can a file copied to or from USB drive be corrupt if drive not unmounted?

标题就是问题。我正在使用 libaums 使用 BufferedInput/OutputStream 双向传输文件,最后调用 close()。然后我关闭 UsbMassStorageDevice 并退出应用程序。

但是,在“设置”->“存储”中,我看到 USB OTG 存储保持挂载状态。它只能在设置中的弹出窗口中卸载。似乎没有合法的 Android API 从代码中卸载 USB 驱动器。

因为我正在构建一个最小的 UI/minimal 交互应用程序,所以这是一个主要的麻烦。但是,我已经多次拔下棒子而没有明确卸载并且复制的文件始终有效(使用 diff 进行检查)。

那么 - 复制文件并使用 libaums 调用 close 是否可以保证文件的完整传输?或者是否存在一些无法强制刷新的底层 OS 内存缓冲区,因此在不卸载的情况下拔下驱动器会导致文件损坏?

好问题! 你应该没问题,因为 USB 通信总是被确认。这意味着,如果您无一例外地关闭 returns 的调用,则可以保证 USB 驱动器已通过 "Ok" 将数据回复给主机。您可以看到代码 [1] 的特定部分,我正在其中检查来自驱动器的成功答案。

[1] https://github.com/magnusja/libaums/blob/develop/libaums/src/main/java/com/github/mjdev/libaums/driver/scsi/ScsiBlockDevice.java#L175-L191