KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > archive > io > ArraySeekInputStream


1 /* ArraySeekInputStream
2 *
3 * Created on September 18, 2006
4 *
5 * Copyright (C) 2006 Internet Archive.
6 *
7 * This file is part of the Heritrix web crawler (crawler.archive.org).
8 *
9 * Heritrix is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser Public License as published by
11 * the Free Software Foundation; either version 2.1 of the License, or
12 * any later version.
13 *
14 * Heritrix is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Lesser Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser Public License
20 * along with Heritrix; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */

23 package org.archive.io;
24
25 import java.io.IOException JavaDoc;
26
27
28 /**
29  * A repositionable stream backed by an array.
30  *
31  * @author pjack
32  */

33 public class ArraySeekInputStream extends SeekInputStream {
34
35
36     /**
37      * The array of bytes to read from.
38      */

39     private byte[] array;
40     
41     
42     /**
43      * The offset in the array of the next byte to read.
44      */

45     private int offset;
46     
47     
48     /**
49      * Constructor. Note that changes to the given array will be reflected
50      * in the stream.
51      *
52      * @param array The array to read bytes from.
53      */

54     public ArraySeekInputStream(byte[] array) {
55         this.array = array;
56         this.offset = 0;
57     }
58     
59     
60     @Override JavaDoc
61     public int read() {
62         if (offset >= array.length) {
63             return -1;
64         }
65         int r = array[offset] & 0xFF;
66         offset++;
67         return r;
68     }
69
70     
71     @Override JavaDoc
72     public int read(byte[] buf, int ofs, int len) {
73         if (offset >= array.length) {
74             return 0;
75         }
76         len = Math.min(len, array.length - offset);
77         System.arraycopy(array, offset, buf, ofs, len);
78         offset += len;
79         return len;
80     }
81     
82     
83     @Override JavaDoc
84     public int read(byte[] buf) {
85         return read(buf, 0, buf.length);
86     }
87
88     
89     /**
90      * Returns the position of the stream.
91      */

92     public long position() {
93         return offset;
94     }
95
96
97     /**
98      * Repositions the stream.
99      *
100      * @param p the new position for the stream
101      * @throws IOException if the given position is out of bounds
102      */

103     public void position(long p) throws IOException JavaDoc {
104         if ((p < 0) || (p > array.length)) {
105             throw new IOException JavaDoc("Invalid position: " + p);
106         }
107         offset = (int)p;
108     }
109
110 }
111
Popular Tags