题主问的应该是MTP模式和U盘模式
USB存储模式(U盘模式)的坏处:1. 数据一致性不好保证;2. 支持存储卡的手机越来越少了。
如果题主仔细观察的话,支持USB存储模式的手机,大部分都是把手机存储卡作为USB存储设备,而内置的存储是不行的,并且存储卡作为USB存储设备被PC机访问的时候,在手机端存储卡是被卸载的状态。也就是说,以USB存储模式工作的情况下,手机放上访问不了该存储设备,设备需要以独占的方式提供给PC访问。
而MTP模式则没有问题,并且MTP模式还能访问内置存储,所以现在手机基本上都是以MTP模式连接PC,因为MTP更灵活。
要独占访问的原因就是我说的第一条:数据一致性。
U盘模式下,手机以块设备方式工作,手机先识别到一个块设备,然后按块读取内容,并获得文件系统类型,挂载文件系统,然后提供给PC访问,PC端能操作的基本单元是扇区。
而一般的操作系统中,文件系统和设备驱动的布局如下,需要注意的是下层是没有比较简单的机制能直接通知上层某个数据的改变的:
[IO系统框架,提供open/read/write等上层操作] | [文件系统驱动,提供文件的操作] | [块设备驱动,基本操作单元是扇区或者块] <---U盘模式工作在这里
那么如果两边都能以U盘方式访问,那么假设PC更改了某个块,但这个块可能已经被文件系统缓冲了,这种情况下,PC和手机同时修改一个文件,那么两边同时更新一个块,数据就发生了冲突。更极端的情况:如果PC上创建了一个新文件,手机上可能看不到这个文件,因为手机的文件系统里并不知道块设备里写了新数据。
为了解决这个问题,才有了MTP的方案,MTP工作在更上层(可能是IO系统框架或者文件系统一层,不同操作系统实现不同),这种情况下,所有的操作都要经过文件系统,就不会有数据不一致的问题了。
所以现在厂商基本都用MTP,因为MTP保证数据一致性,也能访问内置存储。
U盘模式还有一些坏处,比如需要安全移除,突然掉电的时候或者传输的过程拔除设备会损坏存储卡,造成数据丢失,MTP是没这个问题的。
------------------------
评论区有人说MTP性能不行,主要的性能瓶颈是在小文件上。大文件的性能与USB存储模式几乎没有区别。原因是MTP的操作对象是文件,缺少文件系统底层的缓存,不能够做块一级的预读,这样就导致了批量赋值小文件的时候要一个文件一个文件的读取属性,不能批量操作,也不能在挂载阶段预读,开销非常巨大。
MTP有各种不好,但对于厂商来说,避免的存储设备的损坏,能兼容各种文件系统,还是有进步的,速度慢并不是一个大问题。