org.gnu.jcifs
Class CifsFileInputStream

java.lang.Object
  |
  +--java.io.InputStream
        |
        +--org.gnu.jcifs.CifsFileInputStream

public class CifsFileInputStream
extends java.io.InputStream

A CifsFileInputStream is an input stream for reading data from a CIFS file. The default buffer size is 2048. The system property org.gnu.jcifs.io.bufsize specifies the buffer size. The implementation was borrowed from BufferedInputStream.

Since:
1.0

Constructor Summary
CifsFileInputStream(CifsDisk disk, java.lang.String file)
          Opens the given file for read
CifsFileInputStream(CifsFile file)
          Opens the given file for read
CifsFileInputStream(java.lang.String sessionname, java.lang.String file)
          Opens the given file for read with default buffer size
 
Method Summary
 int available()
          Returns the number of bytes that can be read from this input stream without blocking.
 void close()
          Closes the input file
 void finalize()
          Finalizes this object
 CifsDisk getDisk()
          Returns the disk on which the file resides
 long length()
          Returns the file size
 void mark(int readlimit)
          Marks the current position in this input stream.
 boolean markSupported()
          Tests if this input stream supports the mark and reset methods.
protected  void open(java.lang.String file, CifsDisk disk)
           
 int read()
          Reads the next byte of data from this file.
 int read(byte[] b, int off, int len)
          Reads bytes into a portion of an array.
 void reset()
          Repositions this stream to the position at the time the mark method was last called on this input stream.
 long skip(long n)
          Skips over and discards n bytes of data from the input stream.
 
Methods inherited from class java.io.InputStream
read
 
Methods inherited from class java.lang.Object
, clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CifsFileInputStream

public CifsFileInputStream(CifsDisk disk,
                           java.lang.String file)
                    throws java.io.IOException
Opens the given file for read
Parameters:
disk - disk object
file - name (relative to share name)
Throws:
java.io.IOException - if an I/O error occurs.

CifsFileInputStream

public CifsFileInputStream(java.lang.String sessionname,
                           java.lang.String file)
                    throws java.io.IOException
Opens the given file for read with default buffer size
Parameters:
sessionname - disk session name
file - file name( Syntax: /diskname/path or diskname:\path )
Throws:
java.io.IOException - if an I/O error occurs.

CifsFileInputStream

public CifsFileInputStream(CifsFile file)
                    throws java.io.IOException
Opens the given file for read
Parameters:
file - file
Throws:
java.io.IOException - if an I/O error occurs.
Method Detail

open

protected void open(java.lang.String file,
                    CifsDisk disk)
             throws java.io.IOException

length

public long length()
Returns the file size
Returns:
file size

getDisk

public CifsDisk getDisk()
                 throws java.io.IOException
Returns the disk on which the file resides
Returns:
CifsDisk disk object
Throws:
java.io.IOException - if file is closed

close

public void close()
           throws java.io.IOException
Closes the input file
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException - if an I/O error occurs.

read

public int read()
         throws java.io.IOException
Reads the next byte of data from this file. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

The read method of CifsFileInputStream returns the next byte of data from its buffer if the buffer is not empty. Otherwise, it refills the buffer from the underlying input stream and returns the next character, if the underlying stream has not returned an end-of-stream indicator.

Overrides:
read in class java.io.InputStream
Returns:
the next byte of data, or -1 if the end of the stream is reached.
Throws:
java.io.IOException - if an I/O error occurs.

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads bytes into a portion of an array. This method will block until some input is available, an I/O error occurs, or the end of the stream is reached.

If this stream's buffer is not empty, bytes are copied from it into the array argument. Otherwise, the buffer is refilled from the underlying input stream and, unless the stream returns an end-of-stream indication, the array argument is filled with characters from the newly-filled buffer.

As an optimization, if the buffer is empty, the mark is not valid, and len is at least as large as the buffer, then this method will read directly from the underlying stream into the given array. Thus redundant CifsFileInputStreams will not copy data unnecessarily.

Overrides:
read in class java.io.InputStream
Parameters:
b - destination buffer.
off - offset at which to start storing bytes.
len - maximum number of bytes to read.
Returns:
the number of bytes read, or -1 if the end of the stream has been reached.
Throws:
java.io.IOException - if an I/O error occurs.

skip

public long skip(long n)
          throws java.io.IOException
Skips over and discards n bytes of data from the input stream. The skip method may, for a variety of reasons, end up skipping over some smaller number of bytes, possibly zero. The actual number of bytes skipped is returned.

The skip method of CifsFileInputStream compares the number of bytes it has available in its buffer, k, where k = fCount - fPos, with n. If n ≤ k, then the fPos field is incremented by n. Otherwise, the fPos field is incremented to have the value fCount, and the remaining bytes are skipped by calling the skip method on the underlying input stream, supplying the argument n - k.

Overrides:
skip in class java.io.InputStream
Parameters:
n - the number of bytes to be skipped.
Returns:
the actual number of bytes skipped.
Throws:
java.io.IOException - if an I/O error occurs.

available

public int available()
              throws java.io.IOException
Returns the number of bytes that can be read from this input stream without blocking.

The available method of CifsFileInputStream returns the sum of the the number of bytes remaining to be read in the buffer (fCount - fPos) and the result of calling the available method of the underlying input stream.

Overrides:
available in class java.io.InputStream
Returns:
the number of bytes that can be read from this input stream without blocking.
Throws:
java.io.IOException - if an I/O error occurs.

mark

public void mark(int readlimit)
Marks the current position in this input stream. A subsequent call to the reset method repositions the stream at the last marked position so that subsequent reads re-read the same bytes.

The readlimit argument tells the input stream to allow that many bytes to be read before the mark position gets invalidated.

Overrides:
mark in class java.io.InputStream
Parameters:
readlimit - the maximum limit of bytes that can be read before the mark position becomes invalid.

reset

public void reset()
           throws java.io.IOException
Repositions this stream to the position at the time the mark method was last called on this input stream.

If the stream has not been marked, or if the mark has been invalidated, an IOException is thrown. Stream marks are intended to be used in situations where you need to read ahead a little to see what's in the stream. Often this is most easily done by invoking some general parser. If the stream is of the type handled by the parser, it just chugs along happily. If the stream is not of that type, the parser should toss an exception when it fails. If an exception gets tossed within readlimit bytes, the parser will allow the outer code to reset the stream and to try another parser.

Overrides:
reset in class java.io.InputStream
Throws:
java.io.IOException - if this stream has not been marked or if the mark has been invalidated.

markSupported

public boolean markSupported()
Tests if this input stream supports the mark and reset methods. The markSupported method of CifsFileInputStream returns true.
Overrides:
markSupported in class java.io.InputStream
Returns:
a boolean indicating if this stream type supports the mark and reset methods.

finalize

public void finalize()
Finalizes this object
Overrides:
finalize in class java.lang.Object