public class

CacheSpan

extends java.lang.Object

implements java.lang.Comparable<CacheSpan>

 java.lang.Object

↳androidx.media3.datasource.cache.CacheSpan

Gradle dependencies

compile group: 'androidx.media3', name: 'media3-datasource', version: '1.0.0-alpha03'

  • groupId: androidx.media3
  • artifactId: media3-datasource
  • version: 1.0.0-alpha03

Artifact androidx.media3:media3-datasource:1.0.0-alpha03 it located at Google repository (https://maven.google.com/)

Overview

Defines a span of data that may or may not be cached (as indicated by CacheSpan.isCached).

Summary

Fields
public final java.io.Filefile

The file corresponding to this CacheSpan, or null if CacheSpan.isCached is false.

public final booleanisCached

Whether the CacheSpan is cached.

public final java.lang.Stringkey

The cache key that uniquely identifies the resource.

public final longlastTouchTimestamp

The last touch timestamp, or C.TIME_UNSET if CacheSpan.isCached is false.

public final longlength

The length of the CacheSpan, or C.LENGTH_UNSET if this is an open-ended hole.

public final longposition

The position of the CacheSpan in the resource.

Constructors
publicCacheSpan(java.lang.String key, long position, long length)

Creates a hole CacheSpan which isn't cached, has no last touch timestamp and no file associated.

publicCacheSpan(java.lang.String key, long position, long length, long lastTouchTimestamp, java.io.File file)

Creates a CacheSpan.

Methods
public intcompareTo(CacheSpan another)

public booleanisHoleSpan()

Returns whether this is a hole CacheSpan.

public booleanisOpenEnded()

Returns whether this is an open-ended CacheSpan.

public java.lang.StringtoString()

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Fields

public final java.lang.String key

The cache key that uniquely identifies the resource.

public final long position

The position of the CacheSpan in the resource.

public final long length

The length of the CacheSpan, or C.LENGTH_UNSET if this is an open-ended hole.

public final boolean isCached

Whether the CacheSpan is cached.

public final java.io.File file

The file corresponding to this CacheSpan, or null if CacheSpan.isCached is false.

public final long lastTouchTimestamp

The last touch timestamp, or C.TIME_UNSET if CacheSpan.isCached is false.

Constructors

public CacheSpan(java.lang.String key, long position, long length)

Creates a hole CacheSpan which isn't cached, has no last touch timestamp and no file associated.

Parameters:

key: The cache key that uniquely identifies the resource.
position: The position of the CacheSpan in the resource.
length: The length of the CacheSpan, or C.LENGTH_UNSET if this is an open-ended hole.

public CacheSpan(java.lang.String key, long position, long length, long lastTouchTimestamp, java.io.File file)

Creates a CacheSpan.

Parameters:

key: The cache key that uniquely identifies the resource.
position: The position of the CacheSpan in the resource.
length: The length of the CacheSpan, or C.LENGTH_UNSET if this is an open-ended hole.
lastTouchTimestamp: The last touch timestamp, or C.TIME_UNSET if CacheSpan.isCached is false.
file: The file corresponding to this CacheSpan, or null if it's a hole.

Methods

public boolean isOpenEnded()

Returns whether this is an open-ended CacheSpan.

public boolean isHoleSpan()

Returns whether this is a hole CacheSpan.

public int compareTo(CacheSpan another)

public java.lang.String toString()

Source

/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package androidx.media3.datasource.cache;

import androidx.annotation.Nullable;
import androidx.media3.common.C;
import androidx.media3.common.util.UnstableApi;
import java.io.File;

/** Defines a span of data that may or may not be cached (as indicated by {@link #isCached}). */
@UnstableApi
public class CacheSpan implements Comparable<CacheSpan> {

  /** The cache key that uniquely identifies the resource. */
  public final String key;
  /** The position of the {@link CacheSpan} in the resource. */
  public final long position;
  /**
   * The length of the {@link CacheSpan}, or {@link C#LENGTH_UNSET} if this is an open-ended hole.
   */
  public final long length;
  /** Whether the {@link CacheSpan} is cached. */
  public final boolean isCached;
  /** The file corresponding to this {@link CacheSpan}, or null if {@link #isCached} is false. */
  @Nullable public final File file;
  /** The last touch timestamp, or {@link C#TIME_UNSET} if {@link #isCached} is false. */
  public final long lastTouchTimestamp;

  /**
   * Creates a hole CacheSpan which isn't cached, has no last touch timestamp and no file
   * associated.
   *
   * @param key The cache key that uniquely identifies the resource.
   * @param position The position of the {@link CacheSpan} in the resource.
   * @param length The length of the {@link CacheSpan}, or {@link C#LENGTH_UNSET} if this is an
   *     open-ended hole.
   */
  public CacheSpan(String key, long position, long length) {
    this(key, position, length, C.TIME_UNSET, null);
  }

  /**
   * Creates a CacheSpan.
   *
   * @param key The cache key that uniquely identifies the resource.
   * @param position The position of the {@link CacheSpan} in the resource.
   * @param length The length of the {@link CacheSpan}, or {@link C#LENGTH_UNSET} if this is an
   *     open-ended hole.
   * @param lastTouchTimestamp The last touch timestamp, or {@link C#TIME_UNSET} if {@link
   *     #isCached} is false.
   * @param file The file corresponding to this {@link CacheSpan}, or null if it's a hole.
   */
  public CacheSpan(
      String key, long position, long length, long lastTouchTimestamp, @Nullable File file) {
    this.key = key;
    this.position = position;
    this.length = length;
    this.isCached = file != null;
    this.file = file;
    this.lastTouchTimestamp = lastTouchTimestamp;
  }

  /** Returns whether this is an open-ended {@link CacheSpan}. */
  public boolean isOpenEnded() {
    return length == C.LENGTH_UNSET;
  }

  /** Returns whether this is a hole {@link CacheSpan}. */
  public boolean isHoleSpan() {
    return !isCached;
  }

  @Override
  public int compareTo(CacheSpan another) {
    if (!key.equals(another.key)) {
      return key.compareTo(another.key);
    }
    long startOffsetDiff = position - another.position;
    return startOffsetDiff == 0 ? 0 : ((startOffsetDiff < 0) ? -1 : 1);
  }

  @Override
  public String toString() {
    return "[" + position + ", " + length + "]";
  }
}