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. |
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
For use with
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. |
static int |
MODE_WORLD_WRITEABLE
For use with
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. |
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(ParcelFileDescriptor descriptor) |
Modifier and Type | Method and Description |
---|---|
static ParcelFileDescriptor |
adoptFd(int fd)
Take ownership of a raw native fd in to a new ParcelFileDescriptor.
|
void |
close()
Close the ParcelFileDescriptor.
|
static ParcelFileDescriptor[] |
createPipe()
Create two ParcelFileDescriptors structured as a data pipe.
|
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.
|
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.
|
public static final int MODE_WORLD_READABLE
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.public static final int MODE_WORLD_WRITEABLE
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 descriptor)
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
- Throws FileNotFoundException if the given
file does not exist or can not be opened with the requested mode.public static ParcelFileDescriptor dup(FileDescriptor orig) throws IOException
IOException
public ParcelFileDescriptor dup() throws IOException
IOException
public static ParcelFileDescriptor fromFd(int fd) throws IOException
fd
- The native fd that the ParcelFileDescriptor should dup.IOException
public 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
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 FileDescriptor getFileDescriptor()
public long getStatSize()
public long seekTo(long pos)
public int getFd()
public int detachFd()
public void close() throws IOException
close
in interface Closeable
close
in interface AutoCloseable
IOException
- If an error occurs attempting to close this ParcelFileDescriptor.public String toString()
Object
getClass().getName() + '@' + Integer.toHexString(hashCode())
See Writing a useful
toString
method
if you intend implementing your own toString
method.
protected void finalize() throws Throwable
Object
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.
public int describeContents()
Parcelable
describeContents
in interface Parcelable
public 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 Parcelable
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.PARCELABLE_WRITE_RETURN_VALUE
.