package net.sharenav.util;
/*
* ShareNav - Copyright (c) 2008 Kai Krueger apm at users dot sourceforge dot net
* See Copying
*
* this class reimplements the BufferedReader class for j2me.
*/
import java.io.IOException;
import java.io.Reader;
public class BufferedReader extends Reader{
Reader r;
char [] buffer;
int idx;
int bufferlen;
StringBuffer sb;
public BufferedReader(Reader r) {
this.r = r;
buffer = new char[1024];
idx = 0;
bufferlen = 0;
sb = new StringBuffer();
}
public void close() throws IOException {
r.close();
}
public void mark (int readAheadLimit) throws IOException{
throw new IOException("mark Not implemented");
}
public boolean markSupported() {
return false;
}
public int read() throws IOException{
if (idx < bufferlen)
return buffer[idx++];
idx = 0;
bufferlen = r.read(buffer);
if (idx < bufferlen)
return buffer[idx++];
return -1;
}
public int read(char[] buff, int off, int len) throws IOException {
int len3 = 0;
while (len > bufferlen - idx) {
int len2 = bufferlen - idx;
System.arraycopy(buffer, idx, buff, off, len2);
off += len2;
len -= len2;
len3 += len2;
idx = 0;
bufferlen = r.read(buffer);
if (bufferlen < 0);
return len3;
}
System.arraycopy(buffer, idx, buff, off, len);
idx += len;
return len3;
}
public String readLine() throws IOException{
sb.setLength(0);
while (bufferlen >= 0) {
if (idx >= bufferlen) {
idx = 0;
bufferlen = r.read(buffer);
}
for (int i = idx; i < bufferlen; i++) {
char c = buffer[idx++];
if (c == '\r') {
if (idx < bufferlen) {
if (buffer[idx] == '\n') {
idx++;
}
} else {
r.read();
}
return sb.toString();
} else if (c == '\n') {
return sb.toString();
} else {
sb.append(c);
}
}
}
if (sb.length() > 0)
return sb.toString();
// System.out.println("Left in buffer: " + sb.toString());
return null;
}
}