org.apache.commons.ssl.util.ReadLine Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of not-going-to-be-commons-ssl Show documentation
Show all versions of not-going-to-be-commons-ssl Show documentation
A Java 9+ compliant fork of Not-Yet-Commons-SSL
The newest version!
package org.apache.commons.ssl.util;
import java.io.IOException;
import java.io.InputStream;
/**
* @author Julius Davies
* @author 23-Dec-2007
*/
public class ReadLine {
final InputStream in;
final byte[] bytes = new byte[8192];
int pos = 0;
int avail = 0;
public ReadLine(InputStream in) { this.in = in; }
public String next() throws IOException { return next(1); }
public String next(int lines) throws IOException {
if (lines < 1) {
lines = 1;
}
StringBuffer buf = new StringBuffer(128 * lines);
if (avail <= 0 || pos >= avail) {
pos = 0;
avail = in.read(bytes);
}
while (avail >= 0) {
while (pos < avail) {
char c = (char) bytes[pos++];
switch (c) {
case '\n':
case '\r':
lines--;
if (lines < 1 && buf.length() > 0) {
return buf.toString();
}
break;
default:
buf.append(c);
break;
}
}
pos = 0;
avail = in.read(bytes);
}
return buf.length() > 0 ? buf.toString() : null;
}
public byte[] nextAsBytes() throws IOException { return nextAsBytes(1); }
public byte[] nextAsBytes(int lines) throws IOException {
if (lines < 1) {
lines = 1;
}
byte[] buf = new byte[8192];
int bufPos = 0;
if (avail <= 0 || pos >= avail) {
pos = 0;
avail = in.read(bytes);
}
while (avail >= 0) {
while (pos < avail) {
byte b = bytes[pos++];
switch (b) {
case '\n':
case '\r':
lines--;
if (lines == 0 && bufPos > 0) {
return buf;
}
break;
default:
if (bufPos >= buf.length) {
byte[] moreBuff = new byte[buf.length * 2];
System.arraycopy(buf, 0, moreBuff, 0, buf.length);
buf = moreBuff;
}
buf[bufPos++] = b;
break;
}
}
pos = 0;
avail = in.read(bytes);
}
return bufPos > 0 ? buf : null;
}
}