java lrucache 使用_java-如何使用JakeWharton的DiskLruCache正确读取...

我正在尝试在我的Android应用程序中使用Jake Wharton的DiskLruCache,但似乎无法弄清楚如何使用缓存正确地序列化和反序列化对象.在基本的命令行Java程序中使用以下代码:

DiskLruCache.Editor editor = null;

try {

editor = diskLruCache.edit("objects");

OutputStream timeOs = editor.newOutputStream(0);

OutputStream dataOs = editor.newOutputStream(1);

OutputStream timeBos = new BufferedOutputStream(timeOs);

OutputStream dataBos = new BufferedOutputStream(dataOs);

ObjectOutputStream timeOos = new ObjectOutputStream(timeBos);

ObjectOutputStream dataOos = new ObjectOutputStream(dataBos);

long createTime = System.currentTimeMillis();

String str = "testString";

ArrayList list = new ArrayList();

list.add("item1");

list.add("item2");

timeOos.writeLong(createTime);

// this works:

dataOos.writeObject(str);

// this does not work:

//dataOos.writeObject(list);

timeOos.close();

dataOos.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (editor != null)

try {

editor.commit();

} catch (IOException e) {

e.printStackTrace();

}

}

timeOos.writeLong(createTime)和dataOos.writeObject(str)成功将数据写入高速缓存,但是用dataOos.writeObject(list)替换dataOos.writeObject(str)不起作用.我试过了ArrayLists和HashMaps,看来它们没有被序列化并写入缓存.该程序执行所有代码,然后挂起一分钟左右,然后返回,仅将日志文件保留在缓存目录中.

我不确定DiskLruCache无法处理容器对象是否会成为问题.

编辑(2014-01-03):

Here’s a JUnit test using the Android SDK. testStoreLong(),testStoreString()和testStoreArrayList()通过,但testPersistArrayListSnapshot()和testPersistArrayListEditor()失败.

这是一个奇怪的问题;如果我在第101行(editor.commit();)处设置了一个断点,则继续执行,未创建缓存文件test-store-array-list.0且快照== null,导致测试失败.但是,如果我在第103行放置一个断点(DiskLruCache.Snapshot snapshot = mDiskLruCache.get(“ test-store-array-list”);),该文件将按预期创建.

DiskLruCache中可能存在错误;是否有其他兼容Android的磁盘缓存库?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值