Bugfixed the PeekReader.
[jsvc.git] / src / dolda / jsvc / next / PeekReader.java
CommitLineData
a931ca70
FT
1package dolda.jsvc.next;
2
3import java.io.*;
4
5public class PeekReader extends Reader {
6 private final Reader back;
7 private boolean p = false;
8 private int la;
9
10 public PeekReader(Reader back) {
11 this.back = back;
12 }
13
14 public void close() throws IOException {
15 back.close();
16 }
17
18 public int read() throws IOException {
19 if(p) {
20 p = false;
21 return(la);
22 } else {
23 return(back.read());
24 }
25 }
26
27 public int read(char[] b, int off, int len) throws IOException {
28 int r = 0;
29 while(r < len) {
30 int c = read();
31 if(c < 0)
32 return(r);
33 b[off + r++] = (char)c;
34 }
35 return(r);
36 }
37
38 public boolean ready() throws IOException {
39 if(p)
40 return(true);
41 return(back.ready());
42 }
43
44 protected boolean whitespace(char c) {
45 return(Character.isWhitespace(c));
46 }
47
48 public int peek(boolean skipws) throws IOException {
bce78e9e 49 while(!p || (skipws && (la >= 0) && whitespace((char)la))) {
a931ca70
FT
50 la = back.read();
51 p = true;
bce78e9e 52 }
a931ca70
FT
53 return(la);
54 }
55
56 public int peek() throws IOException {
57 return(peek(false));
58 }
59}