edit method

Future<Editor?> edit(
  1. String key, {
  2. int sequenceNumber = ANY_SEQUENCE_NUMBER,
})

返回名为key的条目的编辑器,如果另一个条目为空,则返回null

Implementation

Future<Editor?> edit(String key, {int sequenceNumber = ANY_SEQUENCE_NUMBER}) async {
  return await _runtimeLock.synchronized(
    () async {
      _checkCacheNotClosed();
      _validateKey(key);

      _Entry? entry = _lruEntries[key];
      if ((entry == null || entry.sequenceNumber != sequenceNumber) && sequenceNumber != ANY_SEQUENCE_NUMBER) {
        return null;
      }

      if (entry == null) {
        entry = _Entry(key, cacheDirectory, valueCount);
        _lruEntries[key] = entry;
      } else if (entry.currentEditor != null) {
        return null;
      }

      Editor editor = Editor(entry, valueCount);
      entry.currentEditor = editor;

      /// 在创建文件之前刷新日志,以防止文件泄漏
      _journalFileWriter!.write("$DIRTY $key\n");
      await _journalFileWriter!.flush();
      return editor;
    },
  );
}