in pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85InputStream.java [69:166]
public int read() throws IOException
{
if (index >= n)
{
if (eof)
{
return -1;
}
index = 0;
int k;
byte z;
do
{
int zz = (byte) in.read();
if (zz == -1)
{
eof = true;
return -1;
}
z = (byte) zz;
} while (z == NEWLINE || z == RETURN || z == SPACE);
if (z == TERMINATOR)
{
eof = true;
ascii = b = null;
n = 0;
return -1;
}
else if (z == Z)
{
b[0] = b[1] = b[2] = b[3] = 0;
n = 4;
}
else
{
ascii[0] = z; // may be EOF here....
for (k = 1; k < 5; ++k)
{
do
{
int zz = (byte) in.read();
if (zz == -1)
{
eof = true;
return -1;
}
z = (byte) zz;
} while (z == NEWLINE || z == RETURN || z == SPACE);
ascii[k] = z;
if (z == TERMINATOR)
{
// don't include ~ as padding byte
ascii[k] = (byte) PADDING_U;
break;
}
}
n = k - 1;
if (n == 0)
{
eof = true;
ascii = null;
b = null;
return -1;
}
if (k < 5)
{
for (++k; k < 5; ++k)
{
// use 'u' for padding
ascii[k] = (byte) PADDING_U;
}
eof = true;
}
// decode stream
long t = 0;
for (k = 0; k < 5; ++k)
{
z = (byte) (ascii[k] - OFFSET);
if (z < 0 || z > 93)
{
n = 0;
eof = true;
ascii = null;
b = null;
throw new IOException("Invalid data in Ascii85 stream");
}
t = (t * 85L) + z;
}
for (k = 3; k >= 0; --k)
{
b[k] = (byte) (t & 0xFFL);
t >>>= 8;
}
}
}
return b[index++] & 0xFF;
}