panda.net.io.ToNetASCIIOutputStream Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of panda-core Show documentation
Show all versions of panda-core Show documentation
Panda Core is the core module of Panda Framework, it contains commonly used utility classes similar to apache-commons.
package panda.net.io;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/***
* This class wraps an output stream, replacing all singly occurring <LF> (linefeed)
* characters with <CR><LF> (carriage return followed by linefeed), which is the
* NETASCII standard for representing a newline. You would use this class to implement ASCII file
* transfers requiring conversion to NETASCII.
***/
public final class ToNetASCIIOutputStream extends FilterOutputStream {
private boolean __lastWasCR;
/***
* Creates a ToNetASCIIOutputStream instance that wraps an existing OutputStream.
*
* @param output The OutputStream to wrap.
***/
public ToNetASCIIOutputStream(OutputStream output) {
super(output);
__lastWasCR = false;
}
/***
* Writes a byte to the stream. Note that a call to this method may result in multiple writes to
* the underlying input stream in order to convert naked newlines to NETASCII line separators.
* This is transparent to the programmer and is only mentioned for completeness.
*
* @param ch The byte to write.
* @exception IOException If an error occurs while writing to the underlying stream.
***/
@Override
public synchronized void write(int ch) throws IOException {
switch (ch) {
case '\r':
__lastWasCR = true;
out.write('\r');
return;
case '\n':
if (!__lastWasCR) {
out.write('\r');
}
//$FALL-THROUGH$
default:
__lastWasCR = false;
out.write(ch);
return;
}
}
/***
* Writes a byte array to the stream.
*
* @param buffer The byte array to write.
* @exception IOException If an error occurs while writing to the underlying stream.
***/
@Override
public synchronized void write(byte buffer[]) throws IOException {
write(buffer, 0, buffer.length);
}
/***
* Writes a number of bytes from a byte array to the stream starting from a given offset.
*
* @param buffer The byte array to write.
* @param offset The offset into the array at which to start copying data.
* @param length The number of bytes to write.
* @exception IOException If an error occurs while writing to the underlying stream.
***/
@Override
public synchronized void write(byte buffer[], int offset, int length) throws IOException {
while (length-- > 0) {
write(buffer[offset++]);
}
}
}