Class XdrOutputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable

    public final class XdrOutputStream
    extends java.io.BufferedOutputStream
    An XdrOutputStream writes data in XDR format to an underlying java.io.OutputStream.

    This class is not thread-safe.

    Author:
    Alejandro Alberola, David Jencks, Mark Rotteveel
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int NULL_BYTE  
      static int SPACE_BYTE  
      • Fields inherited from class java.io.BufferedOutputStream

        buf, count
      • Fields inherited from class java.io.FilterOutputStream

        out
    • Constructor Summary

      Constructors 
      Constructor Description
      XdrOutputStream​(java.io.OutputStream out)
      Create a new instance of XdrOutputStream with default buffer size.
      XdrOutputStream​(java.io.OutputStream out, int bufferSize)
      Create a new instance of XdrOutputStream with the specified buffer size.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Close this stream and the underlying output stream.
      void enableCompression()
      Wraps the underlying stream for zlib compression.
      void setCipher​(javax.crypto.Cipher cipher)  
      void write​(byte[] b, int off, int len)
      Writes len bytes from the specified byte array starting at offset off to this output stream as defined by OutputStream.write(byte[], int, int).
      void write​(byte[] b, int offset, int len, int pad)
      Write a byte buffer to the underlying output stream in XDR format.
      void writeAlignment​(int length)
      Writes the 0x00 alignment for the specified length.
      void writeBuffer​(byte[] buffer)
      Write a byte buffer to the underlying output stream in XDR format.
      void writeDirect​(byte[] data)
      Writes directly to the OutputStream of the underlying socket.
      void writeInt​(int v)
      Write an int value to the underlying stream in XDR format.
      void writeLong​(long v)
      Write a long value to the underlying stream in XDR format.
      void writePadding​(int length, int padByte)
      Writes padding for the specified length of the specified padding byte.
      void writeSpacePadding​(int length)
      Writes space (0x20) padding of the specified length
      void writeString​(java.lang.String s, Encoding encoding)
      Write content of the specified string using the specified encoding.
      void writeTyped​(int type, Xdrable item)
      Write an Xdrable to this output stream.
      void writeTyped​(ParameterBuffer parameterBuffer)  
      void writeZeroPadding​(int length)
      Writes zero padding of the specified length
      • Methods inherited from class java.io.BufferedOutputStream

        flush, write
      • Methods inherited from class java.io.FilterOutputStream

        write
      • Methods inherited from class java.io.OutputStream

        nullOutputStream
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • XdrOutputStream

        public XdrOutputStream​(java.io.OutputStream out)
        Create a new instance of XdrOutputStream with default buffer size.
        Parameters:
        out - The underlying OutputStream to write to
      • XdrOutputStream

        public XdrOutputStream​(java.io.OutputStream out,
                               int bufferSize)
        Create a new instance of XdrOutputStream with the specified buffer size.
        Parameters:
        out - The underlying OutputStream to write to
        bufferSize - The size of the buffer
    • Method Detail

      • writeAlignment

        public void writeAlignment​(int length)
                            throws java.io.IOException
        Writes the 0x00 alignment for the specified length. This padding is calculated as (4 - length) & 3.
        Parameters:
        length - The length of the previously written buffer to pad
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • writeZeroPadding

        public void writeZeroPadding​(int length)
                              throws java.io.IOException
        Writes zero padding of the specified length
        Parameters:
        length - Length to write
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
        See Also:
        writePadding(int, int)
      • writeSpacePadding

        public void writeSpacePadding​(int length)
                               throws java.io.IOException
        Writes space (0x20) padding of the specified length
        Parameters:
        length - Length to write
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
        See Also:
        writePadding(int, int)
      • writePadding

        public void writePadding​(int length,
                                 int padByte)
                          throws java.io.IOException
        Writes padding for the specified length of the specified padding byte.

        Prefer using the more specific writeZeroPadding(int) and writeZeroPadding(int).

        Parameters:
        length - Length of padding to write
        padByte - Padding byte to use
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
        See Also:
        writeSpacePadding(int), writeZeroPadding(int)
      • writeBuffer

        public void writeBuffer​(byte[] buffer)
                         throws java.io.IOException
        Write a byte buffer to the underlying output stream in XDR format.
        Parameters:
        buffer - The byte buffer to be written
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • writeString

        public void writeString​(java.lang.String s,
                                Encoding encoding)
                         throws java.io.IOException
        Write content of the specified string using the specified encoding.
        Throws:
        java.io.IOException
      • writeTyped

        public void writeTyped​(int type,
                               Xdrable item)
                        throws java.io.IOException
        Write an Xdrable to this output stream.
        Parameters:
        type - Type of the Xdrable to be written, e.g. ISCConstants.isc_tpb_version3
        item - The object to be written
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • writeTyped

        public void writeTyped​(ParameterBuffer parameterBuffer)
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • writeLong

        public void writeLong​(long v)
                       throws java.io.IOException
        Write a long value to the underlying stream in XDR format.
        Parameters:
        v - The long value to be written
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • writeInt

        public void writeInt​(int v)
                      throws java.io.IOException
        Write an int value to the underlying stream in XDR format.
        Parameters:
        v - The int value to be written
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • write

        public void write​(byte[] b,
                          int offset,
                          int len,
                          int pad)
                   throws java.io.IOException
        Write a byte buffer to the underlying output stream in XDR format.
        Parameters:
        b - The byte buffer to be written
        offset - The start offset in the buffer
        len - The number of bytes to write
        pad - The number of (blank) padding bytes to write
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException
        Writes len bytes from the specified byte array starting at offset off to this output stream as defined by OutputStream.write(byte[], int, int).

        Important: do not confuse this method with write(byte[], int, int, int) which originally had the signature of this method.

        Overrides:
        write in class java.io.BufferedOutputStream
        Parameters:
        b - The data
        off - The start offset in the data
        len - The number of bytes to write
        Throws:
        java.io.IOException - if an error occurs while writing to the underlying output stream
      • close

        public void close()
                   throws java.io.IOException
        Close this stream and the underlying output stream.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.FilterOutputStream
        Throws:
        java.io.IOException - if an error occurs while closing the underlying stream
      • enableCompression

        @InternalApi
        public void enableCompression()
                               throws java.io.IOException
        Wraps the underlying stream for zlib compression.
        Throws:
        java.io.IOException - If the underlying stream is already set up for compression
      • setCipher

        public void setCipher​(javax.crypto.Cipher cipher)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • writeDirect

        public void writeDirect​(byte[] data)
                         throws java.io.IOException
        Writes directly to the OutputStream of the underlying socket.
        Parameters:
        data - Data to write
        Throws:
        java.io.IOException - For errors writing to the socket.