# DataSourceInputStream

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

*** ** * ** ***


```
@UnstableApi
public final class DataSourceInputStream extends InputStream
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [java.io.InputStream](https://developer.android.com/reference/java/io/InputStream.html) ||
|   | ↳ | [androidx.media3.datasource.DataSourceInputStream](https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream) |

*** ** * ** ***

Allows data corresponding to a given `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` to be read from a `https://developer.android.com/reference/androidx/media3/datasource/DataSource` and consumed through an `https://developer.android.com/reference/java/io/InputStream.html`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#DataSourceInputStream(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSource dataSource, https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` |

| ### Public methods |
|---|---|
| `long` | `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#bytesRead()()` Returns the total number of bytes that have been read or skipped. |
| `void` | `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#close()()` |
| `void` | `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#open()()` Optional call to open the underlying `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |
| `int` | `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#read()()` |
| `int` | `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#read(byte[])(byte[] buffer)` |
| `int` | `https://developer.android.com/reference/androidx/media3/datasource/DataSourceInputStream#read(byte[],int,int)(byte[] buffer, int offset, int length)` |

| ### Inherited methods |
|---|
| From [java.io.InputStream](https://developer.android.com/reference/java/io/InputStream.html) |---|---| | `int` | `https://developer.android.com/reference/java/io/InputStream.html#available()()` | | `synchronized void` | `https://developer.android.com/reference/java/io/InputStream.html#mark(int)(int readlimit)` | | `boolean` | `https://developer.android.com/reference/java/io/InputStream.html#markSupported()()` | | `static https://developer.android.com/reference/java/io/InputStream.html` | `https://developer.android.com/reference/java/io/InputStream.html#nullInputStream()()` | | `byte[]` | `https://developer.android.com/reference/java/io/InputStream.html#readAllBytes()()` | | `byte[]` | `https://developer.android.com/reference/java/io/InputStream.html#readNBytes(int)(int len)` | | `int` | `https://developer.android.com/reference/java/io/InputStream.html#readNBytes(byte[], int, int)(byte[] b, int off, int len)` | | `synchronized void` | `https://developer.android.com/reference/java/io/InputStream.html#reset()()` | | `long` | `https://developer.android.com/reference/java/io/InputStream.html#skip(long)(long n)` | | `void` | `https://developer.android.com/reference/java/io/InputStream.html#skipNBytes(long)(long n)` | | `long` | `https://developer.android.com/reference/java/io/InputStream.html#transferTo(java.io.OutputStream)(https://developer.android.com/reference/java/io/OutputStream.html out)` | |

## Public constructors

### DataSourceInputStream

```
public DataSourceInputStream(DataSource dataSource, DataSpec dataSpec)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource dataSource` | The `https://developer.android.com/reference/androidx/media3/datasource/DataSource` from which the data should be read. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | The `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` defining the data to be read from `dataSource`. |

## Public methods

### bytesRead

```
public long bytesRead()
```

Returns the total number of bytes that have been read or skipped.

### close

```
public void close()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### open

```
public void open()
```

Optional call to open the underlying `https://developer.android.com/reference/androidx/media3/datasource/DataSource`.

Calling this method does nothing if the `https://developer.android.com/reference/androidx/media3/datasource/DataSource` is already open. Calling this method is optional, since the read and skip methods will automatically open the underlying `https://developer.android.com/reference/androidx/media3/datasource/DataSource` if it's not open already.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs opening the `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |

### read

```
public int read()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### read

```
public int read(byte[] buffer)
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### read

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

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |