Home | History | Annotate | Download | only in fs
      1 /*
      2  * Copyright (C) 2003-2009 JNode.org
      3  *               2009,2010 Matthias Treydte <mt (at) waldheinz.de>
      4  *
      5  * This library is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU Lesser General Public License as published
      7  * by the Free Software Foundation; either version 2.1 of the License, or
      8  * (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful, but
     11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     12  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
     13  * License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General Public License
     16  * along with this library; If not, write to the Free Software Foundation, Inc.,
     17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     18  */
     19 
     20 package de.waldheinz.fs;
     21 
     22 import java.io.IOException;
     23 import java.nio.ByteBuffer;
     24 
     25 /**
     26  * A FsFile is a representation of a single block of bytes on a filesystem. It
     27  * is comparable to an inode in Unix.
     28  *
     29  * An FsFile does not have any knowledge of who is using this file. It is also
     30  * possible that the system uses a single FsFile instance to create two
     31  * inputstream's for two different principals.
     32  *
     33  * @author Ewout Prangsma &lt;epr at jnode.org&gt;
     34  */
     35 public interface FsFile extends FsObject {
     36 
     37     /**
     38      * Gets the length (in bytes) of this file.
     39      *
     40      * @return the file size
     41      */
     42     public long getLength();
     43 
     44     /**
     45      * Sets the length of this file.
     46      *
     47      * @param length the new length of this file
     48      * @throws IOException on error updating the file size
     49      */
     50     public void setLength(long length) throws IOException;
     51 
     52     /**
     53      * Reads from this file into the specified {@code ByteBuffer}. The
     54      * first byte read will be put into the buffer at it's
     55      * {@link ByteBuffer#position() position}, and the number of bytes read
     56      * will equal the buffer's {@link ByteBuffer#remaining() remaining} bytes.
     57      *
     58      * @param offset the offset into the file where to start reading
     59      * @param dest the destination buffer where to put the bytes that were read
     60      * @throws IOException on read error
     61      */
     62     public void read(long offset, ByteBuffer dest) throws IOException;
     63 
     64     /**
     65      * Writes to this file taking the data to write from the specified
     66      * {@code ByteBuffer}. This method will read the buffer's
     67      * {@link ByteBuffer#remaining() remaining} bytes starting at it's
     68      * {@link ByteBuffer#position() position}.
     69      *
     70      * @param offset the offset into the file where the first byte will be
     71      *      written
     72      * @param src the source buffer to read the data from
     73      * @throws ReadOnlyException if the file is read-only
     74      * @throws IOException on write error
     75      */
     76     public void write(long offset, ByteBuffer src)
     77             throws ReadOnlyException, IOException;
     78 
     79     /**
     80      * Flush any possibly cached data to the disk.
     81      *
     82      * @throws IOException on error flushing
     83      */
     84     public void flush() throws IOException;
     85 }
     86