Class DataSpec


  • public final class DataSpec
    extends Object
    Defines a region of data in a resource.
    • Field Detail

      • FLAG_ALLOW_GZIP

        public static final int FLAG_ALLOW_GZIP
        Allows an underlying network stack to request that the server use gzip compression.

        Should not typically be set if the data being requested is already compressed (e.g. most audio and video requests). May be set when requesting other data.

        When a DataSource is used to request data with this flag set, and if the DataSource does make a network request, then the value returned from DataSource.open(DataSpec) will typically be C.LENGTH_UNSET. The data read from DataReader.read(byte[], int, int) will be the decompressed data.

        See Also:
        Constant Field Values
      • FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN

        public static final int FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN
        Prevents caching if the length cannot be resolved when the DataSource is opened.
        See Also:
        Constant Field Values
      • FLAG_ALLOW_CACHE_FRAGMENTATION

        public static final int FLAG_ALLOW_CACHE_FRAGMENTATION
        Allows fragmentation of this request into multiple cache files, meaning a cache eviction policy will be able to evict individual fragments of the data. Depending on the cache implementation, setting this flag may also enable more concurrent access to the data (e.g. reading one fragment whilst writing another).
        See Also:
        Constant Field Values
      • FLAG_MIGHT_NOT_USE_FULL_NETWORK_SPEED

        public static final int FLAG_MIGHT_NOT_USE_FULL_NETWORK_SPEED
        Indicates there are known external factors that might prevent the data from being loaded at full network speed (e.g. server throttling or unfinished live media chunks).
        See Also:
        Constant Field Values
      • HTTP_METHOD_GET

        public static final int HTTP_METHOD_GET
        HTTP GET method.
        See Also:
        Constant Field Values
      • HTTP_METHOD_POST

        public static final int HTTP_METHOD_POST
        HTTP POST method.
        See Also:
        Constant Field Values
      • HTTP_METHOD_HEAD

        public static final int HTTP_METHOD_HEAD
        HTTP HEAD method.
        See Also:
        Constant Field Values
      • uri

        public final Uri uri
        A Uri from which data belonging to the resource can be read.
      • uriPositionOffset

        public final long uriPositionOffset
        The offset of the data located at uri within the resource.

        Equal to 0 unless uri provides access to a subset of the resource. As an example, consider a resource that can be requested over the network and is 1000 bytes long. If uri points to a local file that contains just bytes [200-300], then this field will be set to 200.

        This field can be ignored except for in specific circumstances where the absolute position in the resource is required in a DataSource chain. One example is when a DataSource needs to decrypt the content as it's read. In this case the absolute position in the resource is typically needed to correctly initialize the decryption algorithm.

      • httpMethod

        @HttpMethod
        public final int httpMethod
        The HTTP method to use when requesting the data. This value will be ignored by non-HTTP DataSource implementations.
      • httpBody

        @Nullable
        public final byte[] httpBody
        The HTTP request body, null otherwise. If the body is non-null, then httpBody.length will be non-zero.
      • absoluteStreamPosition

        @Deprecated
        public final long absoluteStreamPosition
        Deprecated.
        Use position except for specific use cases where the absolute position within the resource is required within a DataSource chain. Where the absolute position is required, use uriPositionOffset + position.
        The absolute position of the data in the resource.
      • position

        public final long position
        The position of the data when read from uri.
      • length

        public final long length
        The length of the data, or C.LENGTH_UNSET.
      • key

        @Nullable
        public final String key
        A key that uniquely identifies the resource. Used for cache indexing. May be null if the data spec is not intended to be used in conjunction with a cache.
      • customData

        @Nullable
        public final Object customData
        Application specific data.

        This field is intended for advanced use cases in which applications require the ability to attach custom data to DataSpec instances. The custom data should be immutable.

    • Method Detail

      • getStringForHttpMethod

        public static String getStringForHttpMethod​(@HttpMethod
                                                    int httpMethod)
        Returns an uppercase HTTP method name (e.g., "GET", "POST", "HEAD") corresponding to the given DataSpec.HttpMethod.
      • isFlagSet

        public boolean isFlagSet​(@Flags
                                 int flag)
        Returns whether the given flag is set.
        Parameters:
        flag - Flag to be checked if it is set.
      • getHttpMethodString

        public final String getHttpMethodString()
        Returns the uppercase HTTP method name (e.g., "GET", "POST", "HEAD") corresponding to the httpMethod.
      • subrange

        public DataSpec subrange​(long offset)
        Returns a data spec that represents a subrange of the data defined by this DataSpec. The subrange includes data from the offset up to the end of this DataSpec.
        Parameters:
        offset - The offset of the subrange.
        Returns:
        A data spec that represents a subrange of the data defined by this DataSpec.
      • subrange

        public DataSpec subrange​(long offset,
                                 long length)
        Returns a data spec that represents a subrange of the data defined by this DataSpec.
        Parameters:
        offset - The offset of the subrange.
        length - The length of the subrange.
        Returns:
        A data spec that represents a subrange of the data defined by this DataSpec.
      • withUri

        public DataSpec withUri​(Uri uri)
        Returns a copy of this data spec with the specified Uri.
        Parameters:
        uri - The new source Uri.
        Returns:
        The copied data spec with the specified Uri.
      • withRequestHeaders

        public DataSpec withRequestHeaders​(Map<String,​String> httpRequestHeaders)
        Returns a copy of this data spec with the specified HTTP request headers. Headers already in the data spec are not copied to the new instance.
        Parameters:
        httpRequestHeaders - The HTTP request headers.
        Returns:
        The copied data spec with the specified HTTP request headers.
      • withAdditionalHeaders

        public DataSpec withAdditionalHeaders​(Map<String,​String> additionalHttpRequestHeaders)
        Returns a copy this data spec with additional HTTP request headers. Headers in additionalHttpRequestHeaders will overwrite any headers already in the data spec that have the same keys.
        Parameters:
        additionalHttpRequestHeaders - The additional HTTP request headers.
        Returns:
        The copied data spec with the additional HTTP request headers.