Android APIs
public class

ParcelFileDescriptor

extends Object
implements Parcelable Closeable
java.lang.Object
   ↳ android.os.ParcelFileDescriptor

Class Overview

The FileDescriptor returned by readFileDescriptor(), allowing you to close it when done with it.

Summary

Nested Classes
class ParcelFileDescriptor.AutoCloseInputStream An InputStream you can create on a ParcelFileDescriptor, which will take care of calling ParcelFileDescriptor.close() for you when the stream is closed. 
class ParcelFileDescriptor.AutoCloseOutputStream An OutputStream you can create on a ParcelFileDescriptor, which will take care of calling ParcelFileDescriptor.close() for you when the stream is closed. 
class ParcelFileDescriptor.FileDescriptorDetachedException Exception that indicates that the file descriptor was detached. 
interface ParcelFileDescriptor.OnCloseListener Callback indicating that a ParcelFileDescriptor has been closed. 
Constants
int MODE_APPEND For use with open(File, int): append to end of file while writing.
int MODE_CREATE For use with open(File, int): create the file if it doesn't already exist.
int MODE_READ_ONLY For use with open(File, int): open the file with read-only access.
int MODE_READ_WRITE For use with open(File, int): open the file with read and write access.
int MODE_TRUNCATE For use with open(File, int): erase contents of file when opening.
int MODE_WORLD_READABLE This constant was deprecated in API level 19. Creating world-readable files is very dangerous, and likely to cause security holes in applications. It is strongly discouraged; instead, applications should use more formal mechanism for interactions such as ContentProvider, BroadcastReceiver, and Service. There are no guarantees that this access mode will remain on a file, such as when it goes through a backup and restore.
int MODE_WORLD_WRITEABLE This constant was deprecated in API level 19. Creating world-writable files is very dangerous, and likely to cause security holes in applications. It is strongly discouraged; instead, applications should use more formal mechanism for interactions such as ContentProvider, BroadcastReceiver, and Service. There are no guarantees that this access mode will remain on a file, such as when it goes through a backup and restore.
int MODE_WRITE_ONLY For use with open(File, int): open the file with write-only access.
[Expand]
Inherited Constants
From interface android.os.Parcelable
Fields
public static final Creator<ParcelFileDescriptor> CREATOR
Public Constructors
ParcelFileDescriptor(ParcelFileDescriptor wrapped)
Create a new ParcelFileDescriptor wrapped around another descriptor.
Public Methods
static ParcelFileDescriptor adoptFd(int fd)
Take ownership of a raw native fd in to a new ParcelFileDescriptor.
boolean canDetectErrors()
Indicates if this ParcelFileDescriptor can communicate and detect remote errors/crashes.
void checkError()
Detect and throw if the other end of a pipe or socket pair encountered an error or crashed.
void close()
Close the ParcelFileDescriptor.
void closeWithError(String msg)
Close the ParcelFileDescriptor, informing any peer that an error occurred while processing.
static ParcelFileDescriptor[] createPipe()
Create two ParcelFileDescriptors structured as a data pipe.
static ParcelFileDescriptor[] createReliablePipe()
Create two ParcelFileDescriptors structured as a data pipe.
static ParcelFileDescriptor[] createReliableSocketPair()
Create two ParcelFileDescriptors structured as a pair of sockets connected to each other.
static ParcelFileDescriptor[] createSocketPair()
Create two ParcelFileDescriptors structured as a pair of sockets connected to each other.
int describeContents()
Describe the kinds of special objects contained in this Parcelable's marshalled representation.
int detachFd()
Return the native fd int for this ParcelFileDescriptor and detach it from the object here.
static ParcelFileDescriptor dup(FileDescriptor orig)
Create a new ParcelFileDescriptor that is a dup of an existing FileDescriptor.
ParcelFileDescriptor dup()
Create a new ParcelFileDescriptor that is a dup of the existing FileDescriptor.
static ParcelFileDescriptor fromDatagramSocket(DatagramSocket datagramSocket)
Create a new ParcelFileDescriptor from the specified DatagramSocket.
static ParcelFileDescriptor fromFd(int fd)
Create a new ParcelFileDescriptor from a raw native fd.
static ParcelFileDescriptor fromSocket(Socket socket)
Create a new ParcelFileDescriptor from the specified Socket.
int getFd()
Return the native fd int for this ParcelFileDescriptor.
FileDescriptor getFileDescriptor()
Retrieve the actual FileDescriptor associated with this object.
long getStatSize()
Return the total size of the file representing this fd, as determined by stat().
static ParcelFileDescriptor open(File file, int mode, Handler handler, ParcelFileDescriptor.OnCloseListener listener)
Create a new ParcelFileDescriptor accessing a given file.
static ParcelFileDescriptor open(File file, int mode)
Create a new ParcelFileDescriptor accessing a given file.
static int parseMode(String mode)
Converts a string representing a file mode, such as "rw", into a bitmask suitable for use with open(File, int).
String toString()
Returns a string containing a concise, human-readable description of this object.
void writeToParcel(Parcel out, int flags)
Flatten this object in to a Parcel. If PARCELABLE_WRITE_RETURN_VALUE is set in flags, the file descriptor will be closed after a copy is written to the Parcel.
Protected Methods
void finalize()
Invoked when the garbage collector has detected that this instance is no longer reachable.
[Expand]
Inherited Methods
From class java.lang.Object
From interface android.os.Parcelable
From interface java.io.Closeable
From interface java.lang.AutoCloseable

Constants

public static final int MODE_APPEND

Added in API level 3

For use with open(File, int): append to end of file while writing.

Constant Value: 33554432 (0x02000000)

public static final int MODE_CREATE

Added in API level 1

For use with open(File, int): create the file if it doesn't already exist.

Constant Value: 134217728 (0x08000000)

public static final int MODE_READ_ONLY

Added in API level 1

For use with open(File, int): open the file with read-only access.

Constant Value: 268435456 (0x10000000)

public static final int MODE_READ_WRITE

Added in API level 1

For use with open(File, int): open the file with read and write access.

Constant Value: 805306368 (0x30000000)

public static final int MODE_TRUNCATE

Added in API level 1

For use with open(File, int): erase contents of file when opening.

Constant Value: 67108864 (0x04000000)

public static final int MODE_WORLD_READABLE

Added in API level 1

This constant was deprecated in API level 19.
Creating world-readable files is very dangerous, and likely to cause security holes in applications. It is strongly discouraged; instead, applications should use more formal mechanism for interactions such as ContentProvider, BroadcastReceiver, and Service. There are no guarantees that this access mode will remain on a file, such as when it goes through a backup and restore.

For use with open(File, int): if MODE_CREATE has been supplied and this file doesn't already exist, then create the file with permissions such that any application can read it.

Constant Value: 1 (0x00000001)

public static final int MODE_WORLD_WRITEABLE

Added in API level 1

This constant was deprecated in API level 19.
Creating world-writable files is very dangerous, and likely to cause security holes in applications. It is strongly discouraged; instead, applications should use more formal mechanism for interactions such as ContentProvider, BroadcastReceiver, and Service. There are no guarantees that this access mode will remain on a file, such as when it goes through a backup and restore.

For use with open(File, int): if MODE_CREATE has been supplied and this file doesn't already exist, then create the file with permissions such that any application can write it.

Constant Value: 2 (0x00000002)

public static final int MODE_WRITE_ONLY

Added in API level 1

For use with open(File, int): open the file with write-only access.

Constant Value: 536870912 (0x20000000)

Fields

public static final Creator<ParcelFileDescriptor> CREATOR

Added in API level 1

Public Constructors

public ParcelFileDescriptor (ParcelFileDescriptor wrapped)

Added in API level 1

Create a new ParcelFileDescriptor wrapped around another descriptor. By default all method calls are delegated to the wrapped descriptor.

Public Methods

public static ParcelFileDescriptor adoptFd (int fd)

Added in API level 13

Take ownership of a raw native fd in to a new ParcelFileDescriptor. The returned ParcelFileDescriptor now owns the given fd, and will be responsible for closing it. You must not close the fd yourself.

Parameters
fd The native fd that the ParcelFileDescriptor should adopt.
Returns
  • Returns a new ParcelFileDescriptor holding a FileDescriptor for the given fd.

public boolean canDetectErrors ()

Added in API level 19

Indicates if this ParcelFileDescriptor can communicate and detect remote errors/crashes.

See Also

public void checkError ()

Added in API level 19

Detect and throw if the other end of a pipe or socket pair encountered an error or crashed. This allows a reader to distinguish between a valid EOF and an error/crash.

If this ParcelFileDescriptor is unable to detect remote errors, it will return silently.

Throws
IOException for normal errors.
ParcelFileDescriptor.FileDescriptorDetachedException if the remote side called detachFd(). Once detached, the remote side is unable to communicate any errors through closeWithError(String).

public void close ()

Added in API level 1

Close the ParcelFileDescriptor. This implementation closes the underlying OS resources allocated to represent this stream.

Throws
IOException If an error occurs attempting to close this ParcelFileDescriptor.

public void closeWithError (String msg)

Added in API level 19

Close the ParcelFileDescriptor, informing any peer that an error occurred while processing. If the creator of this descriptor is not observing errors, it will close normally.

Parameters
msg describing the error; must not be null.
Throws
IOException

public static ParcelFileDescriptor[] createPipe ()

Added in API level 9

Create two ParcelFileDescriptors structured as a data pipe. The first ParcelFileDescriptor in the returned array is the read side; the second is the write side.

Throws
IOException

public static ParcelFileDescriptor[] createReliablePipe ()

Added in API level 19

Create two ParcelFileDescriptors structured as a data pipe. The first ParcelFileDescriptor in the returned array is the read side; the second is the write side.

The write end has the ability to deliver an error message through closeWithError(String) which can be handled by the read end calling checkError(), usually after detecting an EOF. This can also be used to detect remote crashes.

Throws
IOException

public static ParcelFileDescriptor[] createReliableSocketPair ()

Added in API level 19

Create two ParcelFileDescriptors structured as a pair of sockets connected to each other. The two sockets are indistinguishable.

Both ends have the ability to deliver an error message through closeWithError(String) which can be detected by the other end calling checkError(), usually after detecting an EOF. This can also be used to detect remote crashes.

Throws
IOException

public static ParcelFileDescriptor[] createSocketPair ()

Added in API level 19

Create two ParcelFileDescriptors structured as a pair of sockets connected to each other. The two sockets are indistinguishable.

Throws
IOException

public int describeContents ()

Added in API level 1

Describe the kinds of special objects contained in this Parcelable's marshalled representation.

Returns
  • a bitmask indicating the set of special object types marshalled by the Parcelable.

public int detachFd ()

Added in API level 12

Return the native fd int for this ParcelFileDescriptor and detach it from the object here. You are now responsible for closing the fd in native code.

You should not detach when the original creator of the descriptor is expecting a reliable signal through close() or closeWithError(String).

public static ParcelFileDescriptor dup (FileDescriptor orig)

Added in API level 13

Create a new ParcelFileDescriptor that is a dup of an existing FileDescriptor. This obeys standard POSIX semantics, where the new file descriptor shared state such as file position with the original file descriptor.

Throws
IOException

public ParcelFileDescriptor dup ()

Added in API level 14

Create a new ParcelFileDescriptor that is a dup of the existing FileDescriptor. This obeys standard POSIX semantics, where the new file descriptor shared state such as file position with the original file descriptor.

Throws
IOException

public static ParcelFileDescriptor fromDatagramSocket (DatagramSocket datagramSocket)

Added in API level 14

Create a new ParcelFileDescriptor from the specified DatagramSocket.

Parameters
datagramSocket The DatagramSocket whose FileDescriptor is used to create a new ParcelFileDescriptor.
Returns
  • A new ParcelFileDescriptor with the FileDescriptor of the specified DatagramSocket.

public static ParcelFileDescriptor fromFd (int fd)

Added in API level 13

Create a new ParcelFileDescriptor from a raw native fd. The new ParcelFileDescriptor holds a dup of the original fd passed in here, so you must still close that fd as well as the new ParcelFileDescriptor.

Parameters
fd The native fd that the ParcelFileDescriptor should dup.
Returns
  • Returns a new ParcelFileDescriptor holding a FileDescriptor for a dup of the given fd.
Throws
IOException

public static ParcelFileDescriptor fromSocket (Socket socket)

Added in API level 1

Create a new ParcelFileDescriptor from the specified Socket. The new ParcelFileDescriptor holds a dup of the original FileDescriptor in the Socket, so you must still close the Socket as well as the new ParcelFileDescriptor.

Parameters
socket The Socket whose FileDescriptor is used to create a new ParcelFileDescriptor.
Returns
  • A new ParcelFileDescriptor with the FileDescriptor of the specified Socket.

public int getFd ()

Added in API level 12

Return the native fd int for this ParcelFileDescriptor. The ParcelFileDescriptor still owns the fd, and it still must be closed through this API.

public FileDescriptor getFileDescriptor ()

Added in API level 1

Retrieve the actual FileDescriptor associated with this object.

Returns
  • Returns the FileDescriptor associated with this object.

public long getStatSize ()

Added in API level 3

Return the total size of the file representing this fd, as determined by stat(). Returns -1 if the fd is not a file.

public static ParcelFileDescriptor open (File file, int mode, Handler handler, ParcelFileDescriptor.OnCloseListener listener)

Added in API level 19

Create a new ParcelFileDescriptor accessing a given file.

Parameters
file The file to be opened.
mode The desired access mode, must be one of MODE_READ_ONLY, MODE_WRITE_ONLY, or MODE_READ_WRITE; may also be any combination of MODE_CREATE, MODE_TRUNCATE, MODE_WORLD_READABLE, and MODE_WORLD_WRITEABLE.
handler to call listener from; must not be null.
listener to be invoked when the returned descriptor has been closed; must not be null.
Returns
  • a new ParcelFileDescriptor pointing to the given file.
Throws
FileNotFoundException if the given file does not exist or can not be opened with the requested mode.
IOException

public static ParcelFileDescriptor open (File file, int mode)

Added in API level 1

Create a new ParcelFileDescriptor accessing a given file.

Parameters
file The file to be opened.
mode The desired access mode, must be one of MODE_READ_ONLY, MODE_WRITE_ONLY, or MODE_READ_WRITE; may also be any combination of MODE_CREATE, MODE_TRUNCATE, MODE_WORLD_READABLE, and MODE_WORLD_WRITEABLE.
Returns
  • a new ParcelFileDescriptor pointing to the given file.
Throws
FileNotFoundException if the given file does not exist or can not be opened with the requested mode.

public static int parseMode (String mode)

Added in API level 19

Converts a string representing a file mode, such as "rw", into a bitmask suitable for use with open(File, int).

Parameters
mode The string representation of the file mode.
Returns
  • A bitmask representing the given file mode.
Throws
IllegalArgumentException if the given string does not match a known file mode.

public String toString ()

Added in API level 1

Returns a string containing a concise, human-readable description of this object. Subclasses are encouraged to override this method and provide an implementation that takes into account the object's type and data. The default implementation is equivalent to the following expression:

   getClass().getName() + '@' + Integer.toHexString(hashCode())

See Writing a useful toString method if you intend implementing your own toString method.

Returns
  • a printable representation of this object.

public void writeToParcel (Parcel out, int flags)

Added in API level 1

Flatten this object in to a Parcel. If PARCELABLE_WRITE_RETURN_VALUE is set in flags, the file descriptor will be closed after a copy is written to the Parcel.

Parameters
out The Parcel in which the object should be written.
flags Additional flags about how the object should be written. May be 0 or PARCELABLE_WRITE_RETURN_VALUE.

Protected Methods

protected void finalize ()

Added in API level 1

Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.

Note that objects that override finalize are significantly more expensive than objects that don't. Finalizers may be run a long time after the object is no longer reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup. Note also that finalizers are run on a single VM-wide finalizer thread, so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary for a class that has a native peer and needs to call a native method to destroy that peer. Even then, it's better to provide an explicit close method (and implement Closeable), and insist that callers manually dispose of instances. This works well for something like files, but less well for something like a BigInteger where typical calling code would have to deal with lots of temporaries. Unfortunately, code that creates lots of temporaries is the worst kind of code from the point of view of the single finalizer thread.

If you must use finalizers, consider at least providing your own ReferenceQueue and having your own thread process that queue.

Unlike constructors, finalizers are not automatically chained. You are responsible for calling super.finalize() yourself.

Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.

Throws
Throwable