home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-11-13 | 2.6 KB | 131 lines |
- import java.io.*;
-
- /*
- *
- * TokenInputStream
- This class will read until a token is met, and will
- eat all whitespace.
- *
- */
- public class TokenInputStream extends FilterInputStream
- {
- protected InputStream in;
- protected byte buf[] = new byte[256];
- protected int buf_offset = 0;
- protected int buf_left = 0;
- protected char white[] = null;
-
- public TokenInputStream(InputStream input) {
- super(input);
- in = input;
- setWhite("\r\n\t ");
-
- }
-
- public void setWhite(String s) {
- white = new char[s.length()];
- s.getChars(0,s.length(),white,0);
- }
-
-
- public int read(char b[], int off, int len) throws IOException{
-
- int copied = 0;
- if (buf_left == -1)
- return -1;
-
-
- while (len > 0) {
- if (buf_left == 0) {
- // copy more into buffer
- buf_offset = 0;
- buf_left = in.read(buf, 0, buf.length);
- if (buf_left < 0)
- return copied;
- }
-
- // for each char in the buffer
- for (;buf_left > 0; buf_offset++, buf_left--){
- boolean isToken = false;
- // compare with white
- for (int j = 0; j < white.length; j++) {
- if (buf[buf_offset] == white[j]){
- isToken = true;
- break;
- }
- }
- if (isToken && (copied != 0))
- return copied;
- b[off] =(char) buf[buf_offset];
- off++;
- len--;
- copied++;
- }
- }
- return copied;
- }
-
- public char peek() throws IOException {
-
- while(true) {
-
- if (buf_left == 0) {
- // copy more into buffer
- buf_offset = 0;
- buf_left = in.read(buf, 0, buf.length);
- }
- if (buf_left == -1)
- return 0;
-
- // for each char in the buffer
- for (; buf_left > 0; buf_left --, buf_offset++){
- boolean token = false;
- // compare with white
- for (int j = 0; j < white.length; j++) {
- if (buf[buf_offset] == white[j]){
- token = true;
- break;
- }
- }
- // not a token
- if (!token)
- return (char)buf[buf_offset];
- }
- }
- }
-
- public void eatWhite() throws IOException{
-
- while(true) {
-
- if (buf_left == 0) {
- // copy more into buffer
- buf_offset = 0;
- buf_left = in.read(buf, 0, buf.length);
- }
- if (buf_left == -1)
- return;
-
- // for each char in the buffer
- for (; buf_left > 0; buf_left --, buf_offset++){
- // compare with white
- if (buf[buf_offset] == ' ' ||
- buf[buf_offset] == '\t' ||
- buf[buf_offset] == '\r' ||
- buf[buf_offset] == '\n'){
- continue;
- } else
- return;
- }
- }
- }
- }
-
-
-
-
-
-
-
-
-