aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ch/ethz/ssh2/SFTPInputStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ch/ethz/ssh2/SFTPInputStream.java')
-rw-r--r--src/main/java/ch/ethz/ssh2/SFTPInputStream.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/main/java/ch/ethz/ssh2/SFTPInputStream.java b/src/main/java/ch/ethz/ssh2/SFTPInputStream.java
new file mode 100644
index 0000000..6d997ec
--- /dev/null
+++ b/src/main/java/ch/ethz/ssh2/SFTPInputStream.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2011 David Kocher. All rights reserved.
+ * Please refer to the LICENSE.txt for licensing details.
+ */
+package ch.ethz.ssh2;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @version $Id:$
+ */
+public class SFTPInputStream extends InputStream
+{
+
+ private SFTPv3FileHandle handle;
+
+ /**
+ * Offset (in bytes) in the file to read
+ */
+ private long readOffset = 0;
+
+ public SFTPInputStream(SFTPv3FileHandle handle) {
+ this.handle = handle;
+ }
+
+ /**
+ * Reads up to <code>len</code> bytes of data from the input stream into
+ * an array of bytes. An attempt is made to read as many as
+ * <code>len</code> bytes, but a smaller number may be read, possibly
+ * zero. The number of bytes actually read is returned as an integer.
+ *
+ * @see SFTPv3Client#read(SFTPv3FileHandle,long,byte[],int,int)
+ */
+ @Override
+ public int read(byte[] buffer, int offset, int len) throws IOException
+ {
+ int read = handle.getClient().read(handle, readOffset, buffer, offset, len);
+ if(read > 0) {
+ readOffset += read;
+ }
+ return read;
+ }
+
+ /**
+ * Reads the next byte of data from the input stream. The value byte is
+ * returned as an <code>int</code> in the range <code>0</code> to
+ * <code>255</code>. If no byte is available because the end of the stream
+ * has been reached, the value <code>-1</code> is returned. This method
+ * blocks until input data is available, the end of the stream is detected,
+ * or an exception is thrown.
+ * <p/>
+ * <p> A subclass must provide an implementation of this method.
+ *
+ * @return the next byte of data, or <code>-1</code> if the end of the
+ * stream is reached.
+ * @throws IOException if an I/O error occurs.
+ */
+ @Override
+ public int read() throws IOException {
+ byte[] buffer = new byte[1];
+ int read = handle.getClient().read(handle, readOffset, buffer, 0, 1);
+ if(read > 0) {
+ readOffset += read;
+ }
+ return read;
+ }
+
+ /**
+ * Skips over and discards <code>n</code> bytes of data from this input
+ * stream.
+ *
+ * @param n the number of bytes to be skipped.
+ * @return the actual number of bytes skipped.
+ */
+ @Override
+ public long skip(long n) {
+ readOffset += n;
+ return n;
+ }
+
+ @Override
+ public void close() throws IOException {
+ handle.getClient().closeFile(handle);
+ }
+} \ No newline at end of file