package org.basex.io.in;
import java.io.IOException;
import java.io.InputStream;
/**
* This server-side class wraps an {@link InputStream} filled by a database
* client. The incoming bytes are decoded:
* <ul>
* <li> {@code 0x00} is treated as end of stream, and -1 is returned</li>
* <li> {@code 0xFF} is treated as encoding flag and skipped</li>
* </ul>
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public final class DecodingInput extends InputStream {
/** Input stream. */
private final InputStream input;
/** All bytes have been read. */
private boolean more = true;
/**
* Constructor.
* @param in buffer input to be wrapped
*/
public DecodingInput(final InputStream in) {
input = in;
}
@Override
public int read() throws IOException {
if(more) {
final int b = input.read();
if(b != 0) return b == 0xFF ? input.read() : b;
more = false;
}
return -1;
}
/**
* Flushes the remaining client data.
* @throws IOException I/O exception
*/
public void flush() throws IOException {
while(read() != -1);
}
}