Package android.os

Class ParcelFileDescriptor

    • Field Detail

      • MODE_WORLD_READABLE

        @Deprecated
        public static final 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.
        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.
        See Also:
        Constant Field Values
      • MODE_WORLD_WRITEABLE

        @Deprecated
        public static final 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.
        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.
        See Also:
        Constant Field Values
    • Constructor Detail

      • ParcelFileDescriptor

        public ParcelFileDescriptor​(ParcelFileDescriptor wrapped)
        Create a new ParcelFileDescriptor wrapped around another descriptor. By default all method calls are delegated to the wrapped descriptor.
      • ParcelFileDescriptor

        public ParcelFileDescriptor​(FileDescriptor fd)
    • Method Detail

      • dup

        public static ParcelFileDescriptor dup​(FileDescriptor orig)
                                        throws IOException
        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
      • dup

        public ParcelFileDescriptor dup()
                                 throws IOException
        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
      • fromFd

        public static ParcelFileDescriptor fromFd​(int fd)
                                           throws IOException
        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
      • adoptFd

        public static ParcelFileDescriptor adoptFd​(int fd)
        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.
      • fromSocket

        public static ParcelFileDescriptor fromSocket​(Socket socket)
        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.
      • fromDatagramSocket

        public static ParcelFileDescriptor fromDatagramSocket​(DatagramSocket datagramSocket)
        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.
      • createPipe

        public static ParcelFileDescriptor[] createPipe()
                                                 throws IOException
        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
      • createReliablePipe

        public static ParcelFileDescriptor[] createReliablePipe()
                                                         throws IOException
        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
      • createSocketPair

        public static ParcelFileDescriptor[] createSocketPair()
                                                       throws IOException
        Create two ParcelFileDescriptors structured as a pair of sockets connected to each other. The two sockets are indistinguishable.
        Throws:
        IOException
      • createReliableSocketPair

        public static ParcelFileDescriptor[] createReliableSocketPair()
                                                               throws IOException
        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
      • fromData

        @Deprecated
        public static ParcelFileDescriptor fromData​(byte[] data,
                                                    String name)
                                             throws IOException
        Deprecated.
        Parameters:
        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.
        Returns:
        A ParcelFileDescriptor.
        Throws:
        IOException - if there is an error while creating the shared memory area.
      • parseMode

        public 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).

        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.
      • getFileDescriptor

        public FileDescriptor getFileDescriptor()
        Retrieve the actual FileDescriptor associated with this object.
        Returns:
        Returns the FileDescriptor associated with this object.
      • getStatSize

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

        public long seekTo​(long pos)
                    throws IOException
        This is needed for implementing AssetFileDescriptor.AutoCloseOutputStream, and I really don't think we want it to be public.
        Throws:
        IOException
      • getFd

        public int getFd()
        Return the native fd int for this ParcelFileDescriptor. The ParcelFileDescriptor still owns the fd, and it still must be closed through this API.
      • detachFd

        public int detachFd()
        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).

        See Also:
        canDetectErrors()
      • close

        public void close()
                   throws IOException
        Close the ParcelFileDescriptor. This implementation closes the underlying OS resources allocated to represent this stream.
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface Closeable
        Throws:
        IOException - If an error occurs attempting to close this ParcelFileDescriptor.
      • closeWithError

        public void closeWithError​(String msg)
                            throws IOException
        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
      • releaseResources

        public void releaseResources()
        Called when the fd is being closed, for subclasses to release any other resources associated with it, such as acquired providers.
      • canDetectErrors

        public boolean canDetectErrors()
        Indicates if this ParcelFileDescriptor can communicate and detect remote errors/crashes.
        See Also:
        checkError()
      • toString

        public String toString()
        Description copied from class: Object
        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.

        Overrides:
        toString in class Object
        Returns:
        a printable representation of this object.
      • finalize

        protected void finalize()
                         throws Throwable
        Description copied from class: Object
        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.

        Overrides:
        finalize in class Object
        Throws:
        Throwable
      • describeContents

        public int describeContents()
        Description copied from interface: Parcelable
        Describe the kinds of special objects contained in this Parcelable's marshalled representation.
        Specified by:
        describeContents in interface Parcelable
        Returns:
        a bitmask indicating the set of special object types marshalled by the Parcelable.