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 toopen(DataSpec)
has thelength
field set toC.LENGTH_UNSET
andDataSpec.FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN
set, thenwrite(byte[], int, int)
calls are ignored.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CacheDataSink.CacheDataSinkException
Thrown when anIOException
is encountered when writing data to the sink.static class
CacheDataSink.Factory
DataSink.Factory
forCacheDataSink
instances.
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_BUFFER_SIZE
Default buffer size in bytes.static long
DEFAULT_FRAGMENT_SIZE
DefaultfragmentSize
recommended for caching use cases.
-
Constructor Summary
Constructors Constructor Description CacheDataSink(Cache cache, long fragmentSize)
Constructs an instance usingDEFAULT_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.
-
-
-
Field Detail
-
DEFAULT_FRAGMENT_SIZE
public static final long DEFAULT_FRAGMENT_SIZE
DefaultfragmentSize
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 usingDEFAULT_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 toC.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 toC.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 callDataSink.close()
to ensure that any partial effects of the invocation are cleaned up.- Specified by:
open
in interfaceDataSink
- 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 interfaceDataSink
- Parameters:
buffer
- The buffer from which data should be consumed.offset
- The offset of the data to consume inbuffer
.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 anIOException
. SeeDataSink.open(DataSpec)
for more details.- Specified by:
close
in interfaceDataSink
- Throws:
CacheDataSink.CacheDataSinkException
-
-