Package org.firebirdsql.gds.impl.wire
Class XdrOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- java.io.FilterOutputStream
-
- java.io.BufferedOutputStream
-
- org.firebirdsql.gds.impl.wire.XdrOutputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.io.Flushable
,java.lang.AutoCloseable
public final class XdrOutputStream extends java.io.BufferedOutputStream
AnXdrOutputStream
writes data in XDR format to an underlyingjava.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
-
Constructor Summary
Constructors Constructor Description XdrOutputStream(java.io.OutputStream out)
Create a new instance ofXdrOutputStream
with default buffer size.XdrOutputStream(java.io.OutputStream out, int bufferSize)
Create a new instance ofXdrOutputStream
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)
Writeslen
bytes from the specified byte array starting at offsetoff
to this output stream as defined byOutputStream.write(byte[], int, int)
.void
write(byte[] b, int offset, int len, int pad)
Write abyte
buffer to the underlying output stream in XDR format.void
writeAlignment(int length)
Writes the0x00
alignment for the specified length.void
writeBuffer(byte[] buffer)
Write abyte
buffer to the underlying output stream in XDR format.void
writeDirect(byte[] data)
Writes directly to theOutputStream
of the underlying socket.void
writeInt(int v)
Write anint
value to the underlying stream in XDR format.void
writeLong(long v)
Write along
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 lengthvoid
writeString(java.lang.String s, Encoding encoding)
Write content of the specified string using the specified encoding.void
writeTyped(int type, Xdrable item)
Write anXdrable
to this output stream.void
writeTyped(ParameterBuffer parameterBuffer)
void
writeZeroPadding(int length)
Writes zero padding of the specified length
-
-
-
Field Detail
-
SPACE_BYTE
public static final int SPACE_BYTE
- See Also:
- Constant Field Values
-
NULL_BYTE
public static final int NULL_BYTE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
XdrOutputStream
public XdrOutputStream(java.io.OutputStream out)
Create a new instance ofXdrOutputStream
with default buffer size.- Parameters:
out
- The underlyingOutputStream
to write to
-
XdrOutputStream
public XdrOutputStream(java.io.OutputStream out, int bufferSize)
Create a new instance ofXdrOutputStream
with the specified buffer size.- Parameters:
out
- The underlyingOutputStream
to write tobufferSize
- The size of the buffer
-
-
Method Detail
-
writeAlignment
public void writeAlignment(int length) throws java.io.IOException
Writes the0x00
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)
andwriteZeroPadding(int)
.- Parameters:
length
- Length of padding to writepadByte
- 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 abyte
buffer to the underlying output stream in XDR format.- Parameters:
buffer
- Thebyte
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 anXdrable
to this output stream.- Parameters:
type
- Type of theXdrable
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 along
value to the underlying stream in XDR format.- Parameters:
v
- Thelong
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 anint
value to the underlying stream in XDR format.- Parameters:
v
- Theint
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 abyte
buffer to the underlying output stream in XDR format.- Parameters:
b
- Thebyte
buffer to be writtenoffset
- The start offset in the bufferlen
- The number of bytes to writepad
- 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
Writeslen
bytes from the specified byte array starting at offsetoff
to this output stream as defined byOutputStream.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 classjava.io.BufferedOutputStream
- Parameters:
b
- The dataoff
- The start offset in the datalen
- 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 interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.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 theOutputStream
of the underlying socket.- Parameters:
data
- Data to write- Throws:
java.io.IOException
- For errors writing to the socket.
-
-