KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > imagero > uio > io > RandomAccessInputStream


1 /*
2  * Copyright (c) Andrey Kuznetsov. All Rights Reserved.
3  *
4  * http://uio.imagero.com
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * o Redistributions of source code must retain the above copyright notice,
10  * this list of conditions and the following disclaimer.
11  *
12  * o Redistributions in binary form must reproduce the above copyright notice,
13  * this list of conditions and the following disclaimer in the documentation
14  * and/or other materials provided with the distribution.
15  *
16  * o Neither the name of imagero Andrei Kouznetsov nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */

32 package com.imagero.uio.io;
33
34 import com.imagero.uio.RandomAccessRO;
35
36 import java.io.IOException JavaDoc;
37 import java.io.InputStream JavaDoc;
38
39 /**
40  * same as FilterInputStream but with RandomAccess
41  * @author Kouznetsov Andrei
42  */

43 public class RandomAccessInputStream extends InputStream JavaDoc {
44     protected static long MARK_UNDEFINED = -1L;
45
46     protected RandomAccessRO ro;
47     protected long pos;
48     protected long mark = MARK_UNDEFINED;
49     protected long startPos;
50
51
52     public RandomAccessInputStream(RandomAccessRO ro) {
53         this(ro, 0L);
54     }
55
56     public RandomAccessInputStream(RandomAccessRO ro, long startPos) {
57         this.ro = ro;
58         this.pos = startPos;
59         this.startPos = startPos;
60     }
61
62     synchronized public int read() throws IOException JavaDoc {
63         checkPos();
64         int a = ro.read();
65         pos++;
66         return a;
67     }
68
69     public int read(byte[] b) throws IOException JavaDoc {
70         return read(b, 0, b.length);
71     }
72
73     synchronized public int read(byte[] b, int off, int len) throws IOException JavaDoc {
74         checkPos();
75         int r = ro.read(b, off, len);
76         pos += r;
77         return r;
78     }
79
80     protected void checkPos() throws IOException JavaDoc {
81         if(ro.getFilePointer() != pos) {
82             ro.seek(pos);
83         }
84     }
85
86     /**
87      * releases reference to RandomAccessRO, but does not closes it
88      */

89     public void close() throws IOException JavaDoc {
90         ro = null;
91     }
92
93     public int available() throws IOException JavaDoc {
94         return (int)(ro.length() - pos);
95     }
96
97     public boolean markSupported() {
98         return true;
99     }
100
101     public void mark(int i) {
102         mark = pos;
103     }
104
105     public void reset() throws IOException JavaDoc {
106         if(mark == MARK_UNDEFINED) {
107             throw new IOException JavaDoc("mark undefined");
108         }
109         pos = mark;
110     }
111
112     public long skip(long l) throws IOException JavaDoc {
113         long skip = Math.min(ro.length() - pos, l);
114         pos += skip;
115         return skip;
116     }
117 }
118
Popular Tags