从内容提供程序返回内存映射的InputStream?

Pey*_*loW 5 android memory-mapped-files android-contentprovider

内容提供者消费者的客户端我可以做这样的事情,以获得正确的InputStream来读取图片:

InputStream is = getContentResolver().openInputStream(pictureUri);
Run Code Online (Sandbox Code Playgroud)

这是一个很好的API,并且在服务器端,实际的内容提供者会调用:

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
  // Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode)
}
Run Code Online (Sandbox Code Playgroud)

但是如果映射到URI的图片不是在文件系统上找到,而是作为内存资源,或者是动态生成的.

我可以建立存储器映射FileInputStream,或其他任何东西,所以,我不保存临时文件的磁盘需要,只是为了能够将其返回到我的内容提供商的消费者?

Eri*_*ill 1

这很难。您也许可以使用任何可以使用 Socket 接口的东西。我没有这样做,但这就是让我这么认为的原因:

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html#fromSocket(java.net.Socket)

从理论上讲,套接字可以是互联网资源,或者几乎任何东西......如果您愿意在套接字级别工作。我可能会放弃并创建临时文件。也许这让我成为一个胆小鬼。