Back to Exoplayer

AtomicFile (ExoPlayer library)

docs/doc/reference/com/google/android/exoplayer2/util/AtomicFile.html

latest6.3 KB
Original Source

Package com.google.android.exoplayer2.util

Class AtomicFile


[@Deprecated](https://developer.android.com/reference/java/lang/Deprecated.html "class or interface in java.lang")public final classAtomicFileextends[Object](https://developer.android.com/reference/java/lang/Object.html "class or interface in java.lang")

Deprecated. com.google.android.exoplayer2 is deprecated. Please migrate to androidx.media3 (which contains the same ExoPlayer code). See the migration guide for more details, including a script to help with the migration.

A helper class for performing atomic operations on a file by creating a backup file until a write has successfully completed.

Atomic file guarantees file integrity by ensuring that a file has been completely written and synced to disk before removing its backup. As long as the backup file exists, the original file is considered to be invalid (left over from a previous attempt to write the file).

Atomic file does not confer any file locking semantics. Do not use this class when the file may be accessed or modified concurrently by multiple threads or processes. The caller is responsible for ensuring appropriate mutual exclusion invariants whenever it accesses the file.

Constructor Summary

Constructors | Constructor | Description | | --- | --- | | AtomicFile​(File baseName) | Deprecated.

Create a new AtomicFile for a file located at the given File path. |

Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods | Modifier and Type | Method | Description | | --- | --- | --- | | void | delete() | Deprecated.

Delete the atomic file. | | void | endWrite​(OutputStream str) | Deprecated.

Call when you have successfully finished writing to the stream returned by startWrite(). | | boolean | exists() | Deprecated.

Returns whether the file or its backup exists. | | InputStream | openRead() | Deprecated.

Open the atomic file for reading. | | OutputStream | startWrite() | Deprecated.

Start a new write operation on the file. |

- 

Methods inherited from class java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

- 

AtomicFile

public AtomicFile​([File](https://developer.android.com/reference/java/io/File.html "class or interface in java.io")baseName)

Deprecated.

Create a new AtomicFile for a file located at the given File path. The secondary backup file will be the same file path with ".bak" appended.

Method Detail

- 

exists

public boolean exists()

Deprecated.

Returns whether the file or its backup exists.

- 

delete

public void delete()

Deprecated.

Delete the atomic file. This deletes both the base and backup files.

- 

startWrite

public[OutputStream](https://developer.android.com/reference/java/io/OutputStream.html "class or interface in java.io")startWrite()
                        throws[IOException](https://developer.android.com/reference/java/io/IOException.html "class or interface in java.io")

Deprecated.

Start a new write operation on the file. This returns an OutputStream to which you can write the new file data. If the whole data is written successfully you must call endWrite(OutputStream). On failure you should call OutputStream.close() only to free up resources used by it.

Example usage:

DataOutputStream dataOutput = null;
   try {
     OutputStream outputStream = atomicFile.startWrite();
     dataOutput = new DataOutputStream(outputStream); // Wrapper stream
     dataOutput.write(data1);
     dataOutput.write(data2);
     atomicFile.endWrite(dataOutput); // Pass wrapper stream
   } finally{
     if (dataOutput != null) {
       dataOutput.close();
     }
   }

Note that if another thread is currently performing a write, this will simply replace whatever that thread is writing with the new file being written by this thread, and when the other thread finishes the write the new write operation will no longer be safe (or will be lost). You must do your own threading protection for access to AtomicFile.

Throws:IOException

- 

endWrite

public void endWrite​([OutputStream](https://developer.android.com/reference/java/io/OutputStream.html "class or interface in java.io")str)
              throws[IOException](https://developer.android.com/reference/java/io/IOException.html "class or interface in java.io")

Deprecated.

Call when you have successfully finished writing to the stream returned by startWrite(). This will close, sync, and commit the new data. The next attempt to read the atomic file will return the new file stream. Parameters:str - Outer-most wrapper OutputStream used to write to the stream returned by startWrite().Throws:IOExceptionSee Also:startWrite()

- 

openRead

public[InputStream](https://developer.android.com/reference/java/io/InputStream.html "class or interface in java.io")openRead()
                     throws[FileNotFoundException](https://developer.android.com/reference/java/io/FileNotFoundException.html "class or interface in java.io")

Deprecated.

Open the atomic file for reading. If there previously was an incomplete write, this will roll back to the last good data before opening for read.

Note that if another thread is currently performing a write, this will incorrectly consider it to be in the state of a bad write and roll back, causing the new data currently being written to be dropped. You must do your own threading protection for access to AtomicFile.

Throws:FileNotFoundException