# DataReader

Artifact: [androidx.media3:media3-common](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/common/DataReader.java+class:androidx.media3.common.DataReader)

*** ** * ** ***


```
@UnstableApi
public interface DataReader
```

<br />

Known direct subclasses [DataSource](https://developer.android.com/reference/androidx/media3/datasource/DataSource), [ExtractorInput](https://developer.android.com/reference/androidx/media3/extractor/ExtractorInput)

|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource` | Reads data from URI-identified resources. |
| `https://developer.android.com/reference/androidx/media3/extractor/ExtractorInput` | Provides data to be consumed by an `https://developer.android.com/reference/androidx/media3/extractor/Extractor`. |

Known indirect subclasses [AesCipherDataSource](https://developer.android.com/reference/androidx/media3/datasource/AesCipherDataSource), [AssetDataSource](https://developer.android.com/reference/androidx/media3/datasource/AssetDataSource), [BaseDataSource](https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource), [ByteArrayDataSource](https://developer.android.com/reference/androidx/media3/datasource/ByteArrayDataSource), [CacheDataSource](https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource), [ContentDataSource](https://developer.android.com/reference/androidx/media3/datasource/ContentDataSource), [CronetDataSource](https://developer.android.com/reference/androidx/media3/datasource/cronet/CronetDataSource), [DataSchemeDataSource](https://developer.android.com/reference/androidx/media3/datasource/DataSchemeDataSource), [DefaultDataSource](https://developer.android.com/reference/androidx/media3/datasource/DefaultDataSource), [DefaultExtractorInput](https://developer.android.com/reference/androidx/media3/extractor/DefaultExtractorInput), [DefaultHttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource), [FakeDataSource](https://developer.android.com/reference/androidx/media3/test/utils/FakeDataSource), [FakeExtractorInput](https://developer.android.com/reference/androidx/media3/test/utils/FakeExtractorInput), [FileDataSource](https://developer.android.com/reference/androidx/media3/datasource/FileDataSource), [FileDescriptorDataSource](https://developer.android.com/reference/androidx/media3/datasource/FileDescriptorDataSource), [ForwardingExtractorInput](https://developer.android.com/reference/androidx/media3/extractor/ForwardingExtractorInput), [HttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource), [HttpEngineDataSource](https://developer.android.com/reference/androidx/media3/datasource/HttpEngineDataSource), [KtorDataSource](https://developer.android.com/reference/androidx/media3/datasource/ktor/KtorDataSource), [MediaDataSourceAdapter](https://developer.android.com/reference/androidx/media3/datasource/MediaDataSourceAdapter), [OkHttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/okhttp/OkHttpDataSource), [PlaceholderDataSource](https://developer.android.com/reference/androidx/media3/datasource/PlaceholderDataSource), [PriorityDataSource](https://developer.android.com/reference/androidx/media3/datasource/PriorityDataSource), [RawResourceDataSource](https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource), [ResolvingDataSource](https://developer.android.com/reference/androidx/media3/datasource/ResolvingDataSource), [RtmpDataSource](https://developer.android.com/reference/androidx/media3/datasource/rtmp/RtmpDataSource), [StatsDataSource](https://developer.android.com/reference/androidx/media3/datasource/StatsDataSource), [TeeDataSource](https://developer.android.com/reference/androidx/media3/datasource/TeeDataSource), [UdpDataSource](https://developer.android.com/reference/androidx/media3/datasource/UdpDataSource)

|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/AesCipherDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` that decrypts the data read from an upstream source. |
| `https://developer.android.com/reference/androidx/media3/datasource/AssetDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a local asset. |
| `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource` | Base `https://developer.android.com/reference/androidx/media3/datasource/DataSource` implementation to keep a list of `https://developer.android.com/reference/androidx/media3/datasource/TransferListener`s. |
| `https://developer.android.com/reference/androidx/media3/datasource/ByteArrayDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a byte array. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` that reads and writes a `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache`. |
| `https://developer.android.com/reference/androidx/media3/datasource/ContentDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a content URI. |
| `https://developer.android.com/reference/androidx/media3/datasource/cronet/CronetDataSource` | DataSource without intermediate buffer based on Cronet API set using UrlRequest. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSchemeDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading data URLs, as defined by RFC 2397. |
| `https://developer.android.com/reference/androidx/media3/datasource/DefaultDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` that supports multiple URI schemes. |
| `https://developer.android.com/reference/androidx/media3/extractor/DefaultExtractorInput` | An `https://developer.android.com/reference/androidx/media3/extractor/ExtractorInput` that wraps a `https://developer.android.com/reference/androidx/media3/common/DataReader`. |
| `https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource` | An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that uses Android's `https://developer.android.com/reference/java/net/HttpURLConnection.html`. |
| `https://developer.android.com/reference/androidx/media3/test/utils/FakeDataSource` | A fake `https://developer.android.com/reference/androidx/media3/datasource/DataSource` capable of simulating various scenarios. |
| `https://developer.android.com/reference/androidx/media3/test/utils/FakeExtractorInput` | A fake `https://developer.android.com/reference/androidx/media3/extractor/ExtractorInput` capable of simulating various scenarios. |
| `https://developer.android.com/reference/androidx/media3/datasource/FileDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading local files. |
| `https://developer.android.com/reference/androidx/media3/datasource/FileDescriptorDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a `https://developer.android.com/reference/java/io/FileDescriptor.html`. |
| `https://developer.android.com/reference/androidx/media3/extractor/ForwardingExtractorInput` | An overridable `https://developer.android.com/reference/androidx/media3/extractor/ExtractorInput` implementation forwarding all methods to another input. |
| `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` | An HTTP `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |
| `https://developer.android.com/reference/androidx/media3/datasource/HttpEngineDataSource` | DataSource without intermediate buffer based on `https://developer.android.com/reference/android/net/http/HttpEngine.html` set using `https://developer.android.com/reference/android/net/http/UrlRequest.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/ktor/KtorDataSource` | An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that delegates to Ktor's `https://api.ktor.io/ktor-client-core/io.ktor.client/-http-client/index.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/MediaDataSourceAdapter` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a `https://developer.android.com/reference/android/media/MediaDataSource.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/okhttp/OkHttpDataSource` | An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that delegates to Square's Call.Factory. |
| `https://developer.android.com/reference/androidx/media3/datasource/PlaceholderDataSource` | A DataSource which provides no data. |
| `https://developer.android.com/reference/androidx/media3/datasource/PriorityDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` that can be used as part of a task registered with a `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager`. |
| `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading a raw resource. |
| `https://developer.android.com/reference/androidx/media3/datasource/ResolvingDataSource` | `https://developer.android.com/reference/androidx/media3/datasource/DataSource` wrapper allowing just-in-time resolution of `https://developer.android.com/reference/androidx/media3/datasource/DataSpec`. |
| `https://developer.android.com/reference/androidx/media3/datasource/rtmp/RtmpDataSource` | A Real-Time Messaging Protocol (RTMP) `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |
| `https://developer.android.com/reference/androidx/media3/datasource/StatsDataSource` | `https://developer.android.com/reference/androidx/media3/datasource/DataSource` wrapper which keeps track of bytes transferred, redirected uris, and response headers. |
| `https://developer.android.com/reference/androidx/media3/datasource/TeeDataSource` | Tees data into a `https://developer.android.com/reference/androidx/media3/datasource/DataSink` as the data is read. |
| `https://developer.android.com/reference/androidx/media3/datasource/UdpDataSource` | A UDP `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |

*** ** * ** ***

Reads bytes from a data stream.

## Summary

| ### Public methods |
|---|---|
| `abstract int` | `https://developer.android.com/reference/androidx/media3/common/DataReader#read(byte[],int,int)(byte[] buffer, int offset, int length)` Reads up to `length` bytes of data from the input. |

## Public methods

### read

```
abstract int read(byte[] buffer, int offset, int length)
```

Reads up to `length` bytes of data from the input.

If `readLength` is zero then 0 is returned. Otherwise, if no data is available because the end of the opened range has been reached, then `https://developer.android.com/reference/androidx/media3/common/C#RESULT_END_OF_INPUT()` is returned. Otherwise, the call will block until at least one byte of data has been read and the number of bytes read is returned.

| Parameters |
|---|---|
| `byte[] buffer` | A target array into which data should be written. |
| `int offset` | The offset into the target array at which to write. |
| `int length` | The maximum number of bytes to read from the input. |

| Returns |
|---|---|
| `int` | The number of bytes read, or `https://developer.android.com/reference/androidx/media3/common/C#RESULT_END_OF_INPUT()` if the input has ended. This may be less than `length` because the end of the input (or available data) was reached, the method was interrupted, or the operation was aborted early for another reason. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs reading from the input. |