org.bouncycastle.mime.LineReader Maven / Gradle / Ivy
package org.bouncycastle.mime;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.bouncycastle.util.Strings;
/**
* Read regular text lines, allowing for a single character look ahead.
*/
class LineReader
{
private final InputStream src;
private int lastC = -1;
LineReader(InputStream src)
{
this.src = src;
}
String readLine()
throws IOException
{
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
int ch;
if (lastC != -1)
{
if (lastC == '\r') // to get this we must have '\r\r' so blank line
{
return "";
}
ch = lastC;
lastC = -1;
}
else
{
ch = src.read();
}
while (ch >= 0 && ch != '\r' && ch != '\n')
{
bOut.write(ch);
ch = src.read();
}
if (ch == '\r')
{
int c = src.read();
if (c != '\n' && c >= 0)
{
lastC = c;
}
}
if (ch < 0)
{
return null;
}
return Strings.fromUTF8ByteArray(bOut.toByteArray());
}
}