Package com.google.android.exoplayer2.upstream.cache

## Class CacheDataSink

- java.lang.Object
- - com.google.android.exoplayer2.upstream.cache.CacheDataSink

- All Implemented Interfaces:
    `DataSink`

      public final class CacheDataSink
      extends Object
      implements DataSink

  Writes data into a cache.

  If the `DataSpec` passed to `open(DataSpec)` has the `length` field set to `C.LENGTH_UNSET` and `DataSpec.FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN` set, then `write(byte[], int, int)` calls are ignored.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `CacheDataSink.CacheDataSinkException` | Thrown when an `IOException` is encountered when writing data to the sink.
    `static class` | `CacheDataSink.Factory` | `DataSink.Factory` for `CacheDataSink` instances.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `DEFAULT_BUFFER_SIZE` | Default buffer size in bytes.
    `static long` | `DEFAULT_FRAGMENT_SIZE` | Default `fragmentSize` recommended for caching use cases.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `CacheDataSink​(Cache cache, long fragmentSize)` | Constructs an instance using `DEFAULT_BUFFER_SIZE`.
    `CacheDataSink​(Cache cache, long fragmentSize, int bufferSize)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | Closes the sink.
    `void` | `open​(DataSpec dataSpec)` | Opens the sink to consume the specified data.
    `void` | `write​(byte[] buffer, int offset, int length)` | Consumes the provided data.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### DEFAULT_FRAGMENT_SIZE

          public static final long DEFAULT_FRAGMENT_SIZE

      Default `fragmentSize` recommended for caching use cases.
      See Also:
        Constant Field Values

    - #### DEFAULT_BUFFER_SIZE

          public static final int DEFAULT_BUFFER_SIZE

      Default buffer size in bytes.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### CacheDataSink

          public CacheDataSink​(Cache cache,
                               long fragmentSize)

      Constructs an instance using `DEFAULT_BUFFER_SIZE`.
      Parameters:
        `cache` - The cache into which data should be written.
        `fragmentSize` - For requests that should be fragmented into multiple cache files, this is the maximum size of a cache file in bytes. If set to `C.LENGTH_UNSET` then no fragmentation will occur. Using a small value allows for finer-grained cache eviction policies, at the cost of increased overhead both on the cache implementation and the file system. Values under `(2 * 1024 * 1024)` are not recommended.

    - #### CacheDataSink

          public CacheDataSink​(Cache cache,
                               long fragmentSize,
                               int bufferSize)

      Parameters:
        `cache` - The cache into which data should be written.
        `fragmentSize` - For requests that should be fragmented into multiple cache files, this is the maximum size of a cache file in bytes. If set to `C.LENGTH_UNSET` then no fragmentation will occur. Using a small value allows for finer-grained cache eviction policies, at the cost of increased overhead both on the cache implementation and the file system. Values under `(2 * 1024 * 1024)` are not recommended.
        `bufferSize` - The buffer size in bytes for writing to a cache file. A zero or negative value disables buffering.

  - ### Method Detail

    - #### open

          public void open​(DataSpec dataSpec)
                    throws CacheDataSink.CacheDataSinkException

      Description copied from interface: `DataSink`
      Opens the sink to consume the specified data.

      Note: If an `IOException` is thrown, callers must still call `DataSink.close()` to ensure that any partial effects of the invocation are cleaned up.

      Specified by:
        `open` in interface `DataSink`
      Parameters:
        `dataSpec` - Defines the data to be consumed.
      Throws:
        `CacheDataSink.CacheDataSinkException`

    - #### write

          public void write​(byte[] buffer,
                            int offset,
                            int length)
                     throws CacheDataSink.CacheDataSinkException

      Description copied from interface: `DataSink`
      Consumes the provided data.
      Specified by:
        `write` in interface `DataSink`
      Parameters:
        `buffer` - The buffer from which data should be consumed.
        `offset` - The offset of the data to consume in `buffer`.
        `length` - The length of the data to consume, in bytes.
      Throws:
        `CacheDataSink.CacheDataSinkException`

    - #### close

          public void close()
                     throws CacheDataSink.CacheDataSinkException

      Description copied from interface: `DataSink`
      Closes the sink.

      Note: This method must be called even if the corresponding call to `DataSink.open(DataSpec)` threw an `IOException`. See `DataSink.open(DataSpec)` for more details.

      Specified by:
        `close` in interface `DataSink`
      Throws:
        `CacheDataSink.CacheDataSinkException`