Java随机访问文件输入流

时间:2016-06-18 16:53:24

标签: java android

我正在访问插入Android的USB闪存盘上的大文件。由于文件很大,我需要在文件中“搜索”而不是加载整个文件。

在C语言中,搜索只是一行代码,但要在android上实现这一点似乎需要一些史诗编码。

我在互联网上看到这个类允许你在流中搜索,但它需要将“文件对象”传递给它的构造函数。

https://github.com/vitalidze/justdlna/blob/master/src/main/java/su/litvak/justdlna/util/RandomAccessFileInputStream.java

现在,我必须访问USB驱动器上的文件的代码是:

pcView.setNeedsDisplay()

drawCanvas1

但是如何从ContentResolver获取文件对象,以便我可以将其传递给RandomAccessFileInputStream类(在上面的链接中)

1 个答案:

答案 0 :(得分:0)

  

我正在访问插入Android的USB闪存盘上的大文件

这可能是个问题。

  

由于文件很大,我需要"寻找"在文件内部而不是加载整个文件。

这可能是一个更大的问题。

  

在C语言中,搜索只是一行代码

不一定。

  

现在我必须访问USB驱动器上的文件的代码是

我假设您从Uri或与存储访问框架绑定的某个类似API获取此ACTION_OPEN_DOCUMENT。如果是这样,如果您认为Uri是一个实际的URI,那么您将获得更好的运气。 URI(例如URL)不一定代表本地资源,也不一定代表" seek只是一行代码"。

InputStream提供mark()reset(),这是您对真正随机搜索功能最接近的事情。而且,并非每个流都支持这些 - 例如,您不一定reset()由TCP / IP套接字支持的流。

  

但是如何从ContentResolver获取文件对象

除了使用InputStream读取Uri所代表的整个内容之外,您不会将FileOutputStream写入File。您可以控制(例如,通过getFilesDir()internal storage上),然后使用生成的文件。

或者,看看您是否可以使用mark()reset(),同时致电markSupported()查看是否可以使用InputStream(它应该在您的身上)情况,但我无法保证)。

或者,建立一个先决条件,将文件从USB闪存驱动器上的其他人复制到您可以直接访问的设备的板载闪存文件系统的一部分,例如external storage

或者,建立一个先决条件,即文件位于removable storage上您的应用程序可以直接访问文件系统的特定位置(即getExternalFilesDirs(),其中数组中的第二个和后续条目是您可以读取和写入的可移动媒体上的位置。