Make CacheDataSink use ReusableBufferedOutputStream

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140010664
This commit is contained in:
eguven 2016-11-23 02:35:22 -08:00 committed by Oliver Woodman
parent fa3d129b14
commit b29ff0cf51

View File

@ -20,8 +20,8 @@ import com.google.android.exoplayer2.upstream.DataSink;
import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.DataSpec;
import com.google.android.exoplayer2.upstream.cache.Cache.CacheException; import com.google.android.exoplayer2.upstream.cache.Cache.CacheException;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.ReusableBufferedOutputStream;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
@ -42,6 +42,7 @@ public final class CacheDataSink implements DataSink {
private FileOutputStream underlyingFileOutputStream; private FileOutputStream underlyingFileOutputStream;
private long outputStreamBytesWritten; private long outputStreamBytesWritten;
private long dataSpecBytesWritten; private long dataSpecBytesWritten;
private ReusableBufferedOutputStream bufferedOutputStream;
/** /**
* Thrown when IOException is encountered when writing data into sink. * Thrown when IOException is encountered when writing data into sink.
@ -132,9 +133,17 @@ public final class CacheDataSink implements DataSink {
file = cache.startFile(dataSpec.key, dataSpec.absoluteStreamPosition + dataSpecBytesWritten, file = cache.startFile(dataSpec.key, dataSpec.absoluteStreamPosition + dataSpecBytesWritten,
Math.min(dataSpec.length - dataSpecBytesWritten, maxCacheFileSize)); Math.min(dataSpec.length - dataSpecBytesWritten, maxCacheFileSize));
underlyingFileOutputStream = new FileOutputStream(file); underlyingFileOutputStream = new FileOutputStream(file);
outputStream = bufferSize > 0 if (bufferSize > 0) {
? new BufferedOutputStream(underlyingFileOutputStream, bufferSize) if (bufferedOutputStream == null) {
: underlyingFileOutputStream; bufferedOutputStream = new ReusableBufferedOutputStream(underlyingFileOutputStream,
bufferSize);
} else {
bufferedOutputStream.reset(underlyingFileOutputStream);
}
outputStream = bufferedOutputStream;
} else {
outputStream = underlyingFileOutputStream;
}
outputStreamBytesWritten = 0; outputStreamBytesWritten = 0;
} }