android - SimpleDiskCache inputStream 数字格式错误

标签 android caching android-lru-cache

我正在使用 SimpleDiskCache 代码 ( github link ) 为我正在使用的 Android 应用程序将一些视频文件缓存到磁盘。 以下是我将视频文件放入缓存的方式:

OutputStream  fil =  videoCache.openStream(newData.getObjectId().toLowerCase());
fil.write(videoInBytes);
fil.flush();
fil.close();

下面是我要从缓存中检索视频文件的代码:

InputStream in = videoCache.getInputStream(newData.getObjectId().toLowerCase()).getInputStream();
File videoFile = Utils.createFile(Utils.TYPE_VIDEO_FILE);
OutputStream os = new FileOutputStream(videoFile);
IOUtils.copy(in, os);
os.close();
in.close();

唯一的问题是我得到一个 IOExption: read failed: EBADF (Bad file number)。这是堆栈跟踪:

06-29 18:47:21.422: W/System.err(19393): java.io.IOException: read failed: EBADF (Bad file number)
06-29 18:47:21.422: W/System.err(19393):    at libcore.io.IoBridge.read(IoBridge.java:442)
06-29 18:47:21.430: W/System.err(19393):    at java.io.FileInputStream.read(FileInputStream.java:179)
06-29 18:47:21.430: W/System.err(19393):    at java.io.InputStream.read(InputStream.java:163)
06-29 18:47:21.430: W/System.err(19393):    at com.google.api.client.util.ByteStreams.copy(ByteStreams.java:51)
06-29 18:47:21.430: W/System.err(19393):    at com.google.api.client.util.IOUtils.copy(IOUtils.java:87)
06-29 18:47:21.430: W/System.err(19393):    at com.google.api.client.util.IOUtils.copy(IOUtils.java:56)
06-29 18:47:21.430: W/System.err(19393):    at com.licenta.mementoapp.datafragments.VideoFragment$1.done(VideoFragment.java:151)

有人知道我做错了什么吗? 谢谢!

最佳答案

似乎输入流在使用之前就被关闭了。您必须在第 59 行评论 snapshot.close() 调用,并在完成后自行关闭输入流。

public InputStreamEntry getInputStream(String key) throws IOException {
    DiskLruCache.Snapshot snapshot = diskLruCache.get(toInternalKey(key));
    if (snapshot == null)
        return null;

    try {
        return new InputStreamEntry(snapshot, readMetadata(snapshot));
    } finally {
        //snapshot.close();
    }
}

关于android - SimpleDiskCache inputStream 数字格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382065/

相关文章:

android - 如何防止LRU缓存android中的内存不足错误

java - 突出显示 TextView 中的文本行,包括所有宽度

asp.net - 在ASP.NET中强制缓存过期的最佳方法是什么?

android - 摆脱启动时的白屏

c++ - 如何缓存 Ruby VALUE 值以供以后重用?

.net - ASP.NET MVC : OutputCache and http headers

java - picasso 图像下载和缓存行为

android - 使用 LruCache 中的图像快速滚动 viewPager

android - 是否可以从适配器加载 ListPreference 项目?

c# - 即将到来的 GCM 响应是 : Error=NotRegistered