Android OTG-U盘文件读写

Android OTG-U盘文件读写
这是我第一次写文章,写的不好的地方请大家多多包涵。
最近因项目需求–在自己项目中写数据到U盘。然后在网上查找这方面的资料,也查到了一些,主要是这几种方式@SEU_Calvin@Jonesx等,这些资料也给了我很大帮助,但是都没能很好的解决问题。最后在github上找到了几个很有效的开源库,在这里和大家分享下,希望对你有帮助。

首先先感谢这几位大牛 @Felipe Herranz、@Magnus、 @Jan Seeger的贡献。
有这几个开源库:
1、Felipe Herranz的 Pincho-Usb-Mass-Storage-for-Android
2、Magnus的 libaums
3、Jan Seeger的 drive-mount

相信你读到我这边文章时,关于android otg-U盘读写的基本准备工作已经做好了。并且这几个库都有详细的api,下面就说说我的使用感
一、Felipe Herranz的 Pincho-Usb-Mass-Storage-for-Android
这个库很好用,在U盘2.0上传输速度也很乐观,使用前请先读api。一定要先调用mount(int index)方法,index时你想把文件存放到U盘的哪一个分区(一般我们U盘都只有一个分区,除非你自己有分区),所以这儿的index一般就传0。源码如下:

public boolean mount(int partitionIndex, int cacheMode) {
    ......
    //关键代码
    if(mbr.getPartitions().length >= partitionIndex + 1) {
        partition = mbr.getPartitions()[partitionIndex];
        if(!partition.isFAT32())
                return false;
    }
    ......
}

代码中partitionIndex 即是传入的分区索引。cacheMode 为缓存模式,0: No cache,1: Cache for a 100 Mbytes allocation,2: Cache half of the FAT,3: Cache the whole FAT。源码中也可以看到,支持的U盘格式为FAT32。后面就是按照api操作。

在使用中我发现个问题,在大量写数据时(测试300条),写到160左就不能继续写了,跟踪源码发现到了一定数据后就停在了一个while循环了。

二、Magnus的 libaums
这个库避免了上一个库存在的问题,使用方法也比较简单,并且有详细的api。注意一点就是U盘写入数据时不支持多线程

public synchronized void write(long devOffset, ByteBuffer src) throws IOException {
}

就写到这儿了,希望对你有帮助。再次感谢@Felipe Herranz、@Magnus、 @Jan Seeger。

猜你喜欢

转载自blog.csdn.net/u010664527/article/details/53840997