KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > quadcap > io > CountedInputStream


1 package com.quadcap.io;
2
3 /* Copyright 1997 - 2003 Quadcap Software. All rights reserved.
4  *
5  * This software is distributed under the Quadcap Free Software License.
6  * This software may be used or modified for any purpose, personal or
7  * commercial. Open Source redistributions are permitted. Commercial
8  * redistribution of larger works derived from, or works which bundle
9  * this software requires a "Commercial Redistribution License"; see
10  * http://www.quadcap.com/purchase.
11  *
12  * Redistributions qualify as "Open Source" under one of the following terms:
13  *
14  * Redistributions are made at no charge beyond the reasonable cost of
15  * materials and delivery.
16  *
17  * Redistributions are accompanied by a copy of the Source Code or by an
18  * irrevocable offer to provide a copy of the Source Code for up to three
19  * years at the cost of materials and delivery. Such redistributions
20  * must allow further use, modification, and redistribution of the Source
21  * Code under substantially the same terms as this license.
22  *
23  * Redistributions of source code must retain the copyright notices as they
24  * appear in each source code file, these license terms, and the
25  * disclaimer/limitation of liability set forth as paragraph 6 below.
26  *
27  * Redistributions in binary form must reproduce this Copyright Notice,
28  * these license terms, and the disclaimer/limitation of liability set
29  * forth as paragraph 6 below, in the documentation and/or other materials
30  * provided with the distribution.
31  *
32  * The Software is provided on an "AS IS" basis. No warranty is
33  * provided that the Software is free of defects, or fit for a
34  * particular purpose.
35  *
36  * Limitation of Liability. Quadcap Software shall not be liable
37  * for any damages suffered by the Licensee or any third party resulting
38  * from use of the Software.
39  */

40
41 import java.io.InputStream JavaDoc;
42 import java.io.IOException JavaDoc;
43
44 import java.util.Vector JavaDoc;
45
46 import com.quadcap.util.Debug;
47
48 /**
49  * This class implements an input stream filter which keeps track of how
50  * many bytes have been read.
51  *
52  * @author Stan Bailes
53  */

54 public class CountedInputStream extends InputStream JavaDoc {
55     InputStream JavaDoc in;
56     int pos = 0;
57
58     /**
59      * Construct a new CountedInputStream reading from the specified base
60      * stream.
61      *
62      * @param in the input stream
63      */

64     public CountedInputStream(InputStream JavaDoc in) {
65     this.in = in;
66     }
67
68     /**
69      * Read the next byte from this input stream.
70      *
71      * @exception IOException if an I/O error occurs.
72      */

73     public int read() throws IOException JavaDoc {
74     pos++;
75     return in.read();
76     }
77
78     /**
79      * Read a block of bytes from this input stream.
80      *
81      * @exception IOException if an I/O error occcurs.
82      */

83     public int read(byte[] buf, int offset, int cnt) throws IOException JavaDoc {
84     int ret = in.read(buf, offset, cnt);
85     pos += ret;
86     return ret;
87     }
88
89     /**
90      * Read a block of bytes from this input stream.
91      *
92      * @exception IOException if an I/O error occcurs.
93      */

94     public int read(byte[] buf) throws IOException JavaDoc {
95     int ret = in.read(buf);
96     pos += ret;
97     return ret;
98     }
99
100     /**
101      * Return the number of bytes that can be read without blocking.
102      */

103     public int available() throws IOException JavaDoc {
104     return in.available();
105     }
106
107     /**
108      * Close the stream.
109      */

110     public void close() throws IOException JavaDoc {
111     in.close();
112     }
113
114     /**
115      * Skip ahead in the stream.
116      */

117     public long skip(long n) throws IOException JavaDoc {
118     return in.skip(n);
119     }
120
121     /**
122      * Mark the current position in the input stream.
123      */

124     public void mark(int readLimit) {
125     in.mark(readLimit);
126     }
127
128     /**
129      * Return to the previously marked position in the input stream.
130      */

131     public void reset() throws IOException JavaDoc {
132     in.reset();
133     }
134
135     /**
136      * Return true if mark/reset supported (they are.)
137      */

138     public boolean markSupported() {
139     return in.markSupported();
140     }
141
142     /**
143      * Return the number of bytes read so far from this input stream.
144      */

145     public int getPosition() {
146     return pos;
147     }
148
149     /**
150      * Set the current position
151      */

152     public void setPosition(int pos) {
153     this.pos = pos;
154     }
155
156 }
157
Popular Tags