FileDocCategorySizeDatePackage
FromNetASCIIInputStream.javaAPI DocApache Commons NET 1.4.1 API6250Sat Dec 03 10:05:48 GMT 2005org.apache.commons.net.io

FromNetASCIIInputStream

public final class FromNetASCIIInputStream extends PushbackInputStream
This class wraps an input stream, replacing all occurrences of <CR><LF> (carriage return followed by a linefeed), which is the NETASCII standard for representing a newline, with the local line separator representation. You would use this class to implement ASCII file transfers requiring conversion from NETASCII.

author
Daniel F. Savarese

Fields Summary
static final boolean
_noConversionRequired
static final String
_lineSeparator
static final byte[]
_lineSeparatorBytes
private int
__length
Constructors Summary
public FromNetASCIIInputStream(InputStream input)
Creates a FromNetASCIIInputStream instance that wraps an existing InputStream.

        super(input, _lineSeparatorBytes.length + 1);
    
Methods Summary
private int__read()

        int ch;

        ch = super.read();

        if (ch == '\r")
        {
            ch = super.read();
            if (ch == '\n")
            {
                unread(_lineSeparatorBytes);
                ch = super.read();
                // This is a kluge for read(byte[], ...) to read the right amount
                --__length;
            }
            else
            {
                if (ch != -1)
                    unread(ch);
                return '\r";
            }
        }

        return ch;
    
public intavailable()
Returns the number of bytes that can be read without blocking EXCEPT when newline conversions have to be made somewhere within the available block of bytes. In other words, you really should not rely on the value returned by this method if you are trying to avoid blocking.

        return (buf.length - pos) + in.available();
    
public static final booleanisConversionRequired()
Returns true if the NetASCII line separator differs from the system line separator, false if they are the same. This method is useful to determine whether or not you need to instantiate a FromNetASCIIInputStream object.

return
True if the NETASCII line separator differs from the local system line separator, false if they are the same.


                                                                    
        
    
        return !_noConversionRequired;
    
public intread()
Reads and returns the next byte in the stream. If the end of the message has been reached, returns -1. Note that a call to this method may result in multiple reads from the underlying input stream in order to convert NETASCII line separators to the local line separator format. This is transparent to the programmer and is only mentioned for completeness.

return
The next character in the stream. Returns -1 if the end of the stream has been reached.
exception
IOException If an error occurs while reading the underlying stream.

        if (_noConversionRequired)
            return super.read();

        return __read();
    
public intread(byte[] buffer)
Reads the next number of bytes from the stream into an array and returns the number of bytes read. Returns -1 if the end of the stream has been reached.

param
buffer The byte array in which to store the data.
return
The number of bytes read. Returns -1 if the end of the message has been reached.
exception
IOException If an error occurs in reading the underlying stream.

        return read(buffer, 0, buffer.length);
    
public intread(byte[] buffer, int offset, int length)
Reads the next number of bytes from the stream into an array and returns the number of bytes read. Returns -1 if the end of the message has been reached. The characters are stored in the array starting from the given offset and up to the length specified.

param
buffer The byte array in which to store the data.
param
offset The offset into the array at which to start storing data.
param
length The number of bytes to read.
return
The number of bytes read. Returns -1 if the end of the stream has been reached.
exception
IOException If an error occurs while reading the underlying stream.

        int ch, off;

        if (length < 1)
            return 0;

        ch = available();

        __length = (length > ch ? ch : length);

        // If nothing is available, block to read only one character
        if (__length < 1)
            __length = 1;

        if (_noConversionRequired)
            return super.read(buffer, offset, __length);

        if ((ch = __read()) == -1)
            return -1;

        off = offset;

        do
        {
            buffer[offset++] = (byte)ch;
        }
        while (--__length > 0 && (ch = __read()) != -1);


        return (offset - off);