public class ParcelFileDescriptor extends Object implements Parcelable, Closeable
Parcel.readFileDescriptor(), allowing
you to close it when done with it.| Modifier and Type | Class and Description |
|---|---|
static 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. |
static 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. |
static class |
ParcelFileDescriptor.FileDescriptorDetachedException
Exception that indicates that the file descriptor was detached.
|
static interface |
ParcelFileDescriptor.OnCloseListener
Callback indicating that a ParcelFileDescriptor has been closed.
|
Parcelable.ClassLoaderCreator<T>, Parcelable.Creator<T>| Modifier and Type | Field and Description |
|---|---|
static Parcelable.Creator<ParcelFileDescriptor> |
CREATOR |
static int |
MODE_APPEND
For use with
open(java.io.File, int): append to end of file while writing. |
static int |
MODE_CREATE
For use with
open(java.io.File, int): create the file if it doesn't already exist. |
static int |
MODE_READ_ONLY
For use with
open(java.io.File, int): open the file with read-only access. |
static int |
MODE_READ_WRITE
For use with
open(java.io.File, int): open the file with read and write access. |
static int |
MODE_TRUNCATE
For use with
open(java.io.File, int): erase contents of file when opening. |
static int |
MODE_WORLD_READABLE
Deprecated.
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 android.app.Service.
There are no guarantees that this access mode will remain on
a file, such as when it goes through a backup and restore. |
static int |
MODE_WORLD_WRITEABLE
Deprecated.
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 android.app.Service.
There are no guarantees that this access mode will remain on
a file, such as when it goes through a backup and restore. |
static int |
MODE_WRITE_ONLY
For use with
open(java.io.File, int): open the file with write-only access. |
CONTENTS_FILE_DESCRIPTOR, PARCELABLE_WRITE_RETURN_VALUE| Constructor and Description |
|---|
ParcelFileDescriptor(FileDescriptor fd) |
ParcelFileDescriptor(FileDescriptor fd,
FileDescriptor commChannel) |
ParcelFileDescriptor(ParcelFileDescriptor wrapped)
Create a new ParcelFileDescriptor wrapped around another descriptor.
|
| Modifier and Type | Method and Description |
|---|---|
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[] |
createReliableSocketPair(int type) |
static ParcelFileDescriptor[] |
createSocketPair()
Create two ParcelFileDescriptors structured as a pair of sockets
connected to each other.
|
static ParcelFileDescriptor[] |
createSocketPair(int type) |
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.
|
ParcelFileDescriptor |
dup()
Create a new ParcelFileDescriptor that is a dup of the existing
FileDescriptor.
|
static ParcelFileDescriptor |
dup(FileDescriptor orig)
Create a new ParcelFileDescriptor that is a dup of an existing
FileDescriptor.
|
protected void |
finalize()
Invoked when the garbage collector has detected that this instance is no longer reachable.
|
static ParcelFileDescriptor |
fromData(byte[] data,
String name)
Deprecated.
|
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)
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(java.io.File, int). |
void |
releaseResources()
Called when the fd is being closed, for subclasses to release any other resources
associated with it, such as acquired providers.
|
long |
seekTo(long pos)
This is needed for implementing AssetFileDescriptor.AutoCloseOutputStream,
and I really don't think we want it to be public.
|
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.
|
@Deprecated public static final int MODE_WORLD_READABLE
ContentProvider,
BroadcastReceiver, and android.app.Service.
There are no guarantees that this access mode will remain on
a file, such as when it goes through a backup and restore.open(java.io.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.@Deprecated public static final int MODE_WORLD_WRITEABLE
ContentProvider,
BroadcastReceiver, and android.app.Service.
There are no guarantees that this access mode will remain on
a file, such as when it goes through a backup and restore.open(java.io.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.public static final int MODE_READ_ONLY
open(java.io.File, int): open the file with read-only access.public static final int MODE_WRITE_ONLY
open(java.io.File, int): open the file with write-only access.public static final int MODE_READ_WRITE
open(java.io.File, int): open the file with read and write access.public static final int MODE_CREATE
open(java.io.File, int): create the file if it doesn't already exist.public static final int MODE_TRUNCATE
open(java.io.File, int): erase contents of file when opening.public static final int MODE_APPEND
open(java.io.File, int): append to end of file while writing.public static final Parcelable.Creator<ParcelFileDescriptor> CREATOR
public ParcelFileDescriptor(ParcelFileDescriptor wrapped)
public ParcelFileDescriptor(FileDescriptor fd)
public ParcelFileDescriptor(FileDescriptor fd, FileDescriptor commChannel)
public static ParcelFileDescriptor open(File file, int mode) throws FileNotFoundException
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.FileNotFoundException - if the given file does not exist or can not
be opened with the requested mode.parseMode(String)public static ParcelFileDescriptor dup(FileDescriptor orig) throws IOException
IOExceptionpublic ParcelFileDescriptor dup() throws IOException
IOExceptionpublic static ParcelFileDescriptor fromFd(int fd) throws IOException
fd - The native fd that the ParcelFileDescriptor should dup.IOExceptionpublic static ParcelFileDescriptor adoptFd(int fd)
fd - The native fd that the ParcelFileDescriptor should adopt.public static ParcelFileDescriptor fromSocket(Socket socket)
socket - The Socket whose FileDescriptor is used to create
a new ParcelFileDescriptor.public static ParcelFileDescriptor fromDatagramSocket(DatagramSocket datagramSocket)
datagramSocket - The DatagramSocket whose FileDescriptor is used
to create a new ParcelFileDescriptor.public static ParcelFileDescriptor[] createPipe() throws IOException
IOExceptionpublic static ParcelFileDescriptor[] createReliablePipe() throws IOException
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.
IOExceptionpublic static ParcelFileDescriptor[] createSocketPair() throws IOException
IOExceptionpublic static ParcelFileDescriptor[] createSocketPair(int type) throws IOException
IOExceptionpublic static ParcelFileDescriptor[] createReliableSocketPair() throws IOException
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.
IOExceptionpublic static ParcelFileDescriptor[] createReliableSocketPair(int type) throws IOException
IOException@Deprecated public static ParcelFileDescriptor fromData(byte[] data, String name) throws IOException
data - Data to copy.name - Name for the shared memory area that may back the file descriptor.
This is purely informative and may be null.IOException - if there is an error while creating the shared memory area.public static int parseMode(String mode)
open(java.io.File, int).
mode - The string representation of the file mode.IllegalArgumentException - if the given string does not match a known file mode.public FileDescriptor getFileDescriptor()
public long getStatSize()
stat(). Returns -1 if the fd is not a file.public long seekTo(long pos)
throws IOException
IOExceptionpublic int getFd()
public int detachFd()
You should not detach when the original creator of the descriptor is
expecting a reliable signal through close() or
closeWithError(String).
canDetectErrors()public void close()
throws IOException
close in interface Closeableclose in interface AutoCloseableIOException - If an error occurs attempting to close this ParcelFileDescriptor.public void closeWithError(String msg) throws IOException
msg - describing the error; must not be null.IOExceptionpublic void releaseResources()
public boolean canDetectErrors()
checkError()public void checkError()
throws IOException
If this ParcelFileDescriptor is unable to detect remote errors, it will return silently.
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).canDetectErrors()public String toString()
ObjectgetClass().getName() + '@' + Integer.toHexString(hashCode())
See Writing a useful
toString method
if you intend implementing your own toString method.
protected void finalize()
throws Throwable
ObjectNote 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.
public int describeContents()
ParcelabledescribeContents in interface Parcelablepublic void writeToParcel(Parcel out, int flags)
Parcelable.PARCELABLE_WRITE_RETURN_VALUE is set in flags,
the file descriptor will be closed after a copy is written to the Parcel.writeToParcel in interface Parcelableout - The Parcel in which the object should be written.flags - Additional flags about how the object should be written.
May be 0 or Parcelable.PARCELABLE_WRITE_RETURN_VALUE.