FileDocCategorySizeDatePackage
ParcelFileDescriptor.javaAPI DocAndroid 1.5 API9069Wed May 06 22:41:56 BST 2009android.os

ParcelFileDescriptor

public class ParcelFileDescriptor extends Object implements Parcelable
The FileDescriptor returned by {@link Parcel#readFileDescriptor}, allowing you to close it when done with it.

Fields Summary
private final FileDescriptor
mFileDescriptor
private boolean
mClosed
private final ParcelFileDescriptor
mParcelDescriptor
public static final int
MODE_WORLD_READABLE
For use with {@link #open}: if {@link #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
For use with {@link #open}: if {@link #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
For use with {@link #open}: open the file with read-only access.
public static final int
MODE_WRITE_ONLY
For use with {@link #open}: open the file with write-only access.
public static final int
MODE_READ_WRITE
For use with {@link #open}: open the file with read and write access.
public static final int
MODE_CREATE
For use with {@link #open}: create the file if it doesn't already exist.
public static final int
MODE_TRUNCATE
For use with {@link #open}: erase contents of file when opening.
public static final int
MODE_APPEND
For use with {@link #open}: append to end of file while writing.
public static final Parcelable.Creator
CREATOR
Constructors Summary
public ParcelFileDescriptor(ParcelFileDescriptor descriptor)

        super();
        mParcelDescriptor = descriptor;
        mFileDescriptor = mParcelDescriptor.mFileDescriptor;
    
ParcelFileDescriptor(FileDescriptor descriptor)

        super();
        mFileDescriptor = descriptor;
        mParcelDescriptor = null;
    
Methods Summary
public voidclose()
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.

        mClosed = true;
        if (mParcelDescriptor != null) {
            // If this is a proxy to another file descriptor, just call through to its
            // close method.
            mParcelDescriptor.close();
        } else {
            Parcel.closeFileDescriptor(mFileDescriptor);
        }
    
public intdescribeContents()

        return Parcelable.CONTENTS_FILE_DESCRIPTOR;
    
protected voidfinalize()

        try {
            if (!mClosed) {
                close();
            }
        } finally {
            super.finalize();
        }
    
public static android.os.ParcelFileDescriptorfromSocket(java.net.Socket socket)
Create a new ParcelFileDescriptor from the specified Socket.

param
socket The Socket whose FileDescriptor is used to create a new ParcelFileDescriptor.
return
A new ParcelFileDescriptor with the FileDescriptor of the specified Socket.

        FileDescriptor fd = getFileDescriptorFromSocket(socket);
        return new ParcelFileDescriptor(fd);
    
public java.io.FileDescriptorgetFileDescriptor()
Retrieve the actual FileDescriptor associated with this object.

return
Returns the FileDescriptor associated with this object.

        return mFileDescriptor;
    
private static native java.io.FileDescriptorgetFileDescriptorFromSocket(java.net.Socket socket)

public native longgetStatSize()
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 android.os.ParcelFileDescriptoropen(java.io.File file, int mode)
Create a new ParcelFileDescriptor accessing a given file.

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

    
                                                                                         
          
              
        String path = file.getPath();
        SecurityManager security = System.getSecurityManager();
        if (security != null) {
            security.checkRead(path);
            if ((mode&MODE_WRITE_ONLY) != 0) {
                security.checkWrite(path);
            }
        }
        
        if ((mode&MODE_READ_WRITE) == 0) {
            throw new IllegalArgumentException(
                    "Must specify MODE_READ_ONLY, MODE_WRITE_ONLY, or MODE_READ_WRITE");
        }
        
        FileDescriptor fd = Parcel.openFileDescriptor(path, mode);
        return new ParcelFileDescriptor(fd);
    
public native longseekTo(long pos)
This is needed for implementing AssetFileDescriptor.AutoCloseOutputStream, and I really don't think we want it to be public.

hide

public java.lang.StringtoString()

        return "{ParcelFileDescriptor: " + mFileDescriptor + "}";
    
public voidwriteToParcel(Parcel out, int flags)

        out.writeFileDescriptor(mFileDescriptor);
        if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0 && !mClosed) {
            try {
                close();
            } catch (IOException e) {
                // Empty
            }
        }