diff --git a/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java b/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java index ba5640c4e0..2707f539bc 100644 --- a/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java +++ b/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java @@ -27,6 +27,7 @@ import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.HttpDataSource; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Predicate; +import com.google.android.exoplayer2.util.Util; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -301,7 +302,7 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource { requestBody = RequestBody.create(null, dataSpec.httpBody); } else if (dataSpec.httpMethod == DataSpec.HTTP_METHOD_POST) { // OkHttp requires a non-null body for POST requests. - requestBody = RequestBody.create(null, new byte[0]); + requestBody = RequestBody.create(null, Util.EMPTY_BYTE_ARRAY); } builder.method(dataSpec.getHttpMethodString(), requestBody); return builder.build(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/SilenceSkippingAudioProcessor.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/SilenceSkippingAudioProcessor.java index 96400cd70b..7c4eacecfb 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/SilenceSkippingAudioProcessor.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/SilenceSkippingAudioProcessor.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.audio; import android.support.annotation.IntDef; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.util.Util; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; @@ -102,8 +103,8 @@ public final class SilenceSkippingAudioProcessor implements AudioProcessor { outputBuffer = EMPTY_BUFFER; channelCount = Format.NO_VALUE; sampleRateHz = Format.NO_VALUE; - maybeSilenceBuffer = new byte[0]; - paddingBuffer = new byte[0]; + maybeSilenceBuffer = Util.EMPTY_BYTE_ARRAY; + paddingBuffer = Util.EMPTY_BYTE_ARRAY; } /** @@ -234,8 +235,8 @@ public final class SilenceSkippingAudioProcessor implements AudioProcessor { channelCount = Format.NO_VALUE; sampleRateHz = Format.NO_VALUE; paddingSize = 0; - maybeSilenceBuffer = new byte[0]; - paddingBuffer = new byte[0]; + maybeSilenceBuffer = Util.EMPTY_BYTE_ARRAY; + paddingBuffer = Util.EMPTY_BYTE_ARRAY; } // Internal methods. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/TrimmingAudioProcessor.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/TrimmingAudioProcessor.java index ccaa9c3fed..ab097821c4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/TrimmingAudioProcessor.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/TrimmingAudioProcessor.java @@ -44,7 +44,7 @@ import java.nio.ByteOrder; outputBuffer = EMPTY_BUFFER; channelCount = Format.NO_VALUE; sampleRateHz = Format.NO_VALUE; - endBuffer = new byte[0]; + endBuffer = Util.EMPTY_BYTE_ARRAY; } /** @@ -180,7 +180,7 @@ import java.nio.ByteOrder; buffer = EMPTY_BUFFER; channelCount = Format.NO_VALUE; sampleRateHz = Format.NO_VALUE; - endBuffer = new byte[0]; + endBuffer = Util.EMPTY_BYTE_ARRAY; } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java index ed6f76d335..8b8c3bec99 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java @@ -110,7 +110,7 @@ public final class HttpMediaDrmCallback implements MediaDrmCallback { public byte[] executeProvisionRequest(UUID uuid, ProvisionRequest request) throws IOException { String url = request.getDefaultUrl() + "&signedRequest=" + Util.fromUtf8Bytes(request.getData()); - return executePost(dataSourceFactory, url, new byte[0], null); + return executePost(dataSourceFactory, url, Util.EMPTY_BYTE_ARRAY, null); } @Override diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java index cef0eb8363..978b1e8813 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java @@ -544,7 +544,7 @@ public final class TsExtractor implements Extractor { if (mode == MODE_HLS && id3Reader == null) { // Setup an ID3 track regardless of whether there's a corresponding entry, in case one // appears intermittently during playback. See [Internal: b/20261500]. - EsInfo dummyEsInfo = new EsInfo(TS_STREAM_TYPE_ID3, null, null, new byte[0]); + EsInfo dummyEsInfo = new EsInfo(TS_STREAM_TYPE_ID3, null, null, Util.EMPTY_BYTE_ARRAY); id3Reader = payloadReaderFactory.createPayloadReader(TS_STREAM_TYPE_ID3, dummyEsInfo); id3Reader.init(timestampAdjuster, output, new TrackIdGenerator(programNumber, TS_STREAM_TYPE_ID3, MAX_PID_PLUS_ONE)); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java b/library/core/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java index 289bcc3f1a..1a7b9bfddb 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java @@ -759,7 +759,7 @@ public final class Id3Decoder implements MetadataDecoder { private static byte[] copyOfRangeIfValid(byte[] data, int from, int to) { if (to <= from) { // Invalid or zero length range. - return new byte[0]; + return Util.EMPTY_BYTE_ARRAY; } return Arrays.copyOfRange(data, from, to); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadAction.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadAction.java index efe537a014..e9868ceea0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadAction.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadAction.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.offline; import android.net.Uri; import android.support.annotation.Nullable; import com.google.android.exoplayer2.util.Assertions; +import com.google.android.exoplayer2.util.Util; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -157,7 +158,7 @@ public abstract class DownloadAction { this.version = version; this.uri = uri; this.isRemoveAction = isRemoveAction; - this.data = data != null ? data : new byte[0]; + this.data = data != null ? data : Util.EMPTY_BYTE_ARRAY; } /** Serializes itself into a byte array. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java b/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java index 2f30612081..6ee1247dc2 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java @@ -111,6 +111,9 @@ public final class Util { public static final String DEVICE_DEBUG_INFO = DEVICE + ", " + MODEL + ", " + MANUFACTURER + ", " + SDK_INT; + /** An empty byte array. */ + public static final byte[] EMPTY_BYTE_ARRAY = new byte[0]; + private static final String TAG = "Util"; private static final Pattern XS_DATE_TIME_PATTERN = Pattern.compile( "(\\d\\d\\d\\d)\\-(\\d\\d)\\-(\\d\\d)[Tt]" diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExtractorInput.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExtractorInput.java index 552827c8da..c467bd36af 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExtractorInput.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExtractorInput.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import android.util.SparseBooleanArray; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.extractor.ExtractorInput; +import com.google.android.exoplayer2.util.Util; import java.io.EOFException; import java.io.IOException; @@ -255,7 +256,7 @@ public final class FakeExtractorInput implements ExtractorInput { private boolean simulateIOErrors; public Builder() { - data = new byte[0]; + data = Util.EMPTY_BYTE_ARRAY; } public Builder setData(byte[] data) { diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java index 6432842df4..4dd00557ae 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java @@ -22,6 +22,7 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.util.ParsableByteArray; +import com.google.android.exoplayer2.util.Util; import java.io.EOFException; import java.io.IOException; import java.util.ArrayList; @@ -44,7 +45,7 @@ public final class FakeTrackOutput implements TrackOutput, Dumper.Dumpable { public Format format; public FakeTrackOutput() { - sampleData = new byte[0]; + sampleData = Util.EMPTY_BYTE_ARRAY; sampleTimesUs = new ArrayList<>(); sampleFlags = new ArrayList<>(); sampleStartOffsets = new ArrayList<>(); @@ -53,7 +54,7 @@ public final class FakeTrackOutput implements TrackOutput, Dumper.Dumpable { } public void clear() { - sampleData = new byte[0]; + sampleData = Util.EMPTY_BYTE_ARRAY; sampleTimesUs.clear(); sampleFlags.clear(); sampleStartOffsets.clear();