Class CompressPacketOutputStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream
org.mariadb.jdbc.internal.io.output.CompressPacketOutputStream
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
,PacketOutputStream
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
private static final byte[]
private final byte[]
private boolean
private static final Logger
private static final int
private int
private static final float
private static final int
private byte[]
private final byte[]
Fields inherited from class org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream
buf, cmdLength, maxAllowedPacket, maxQuerySizeToLog, permitTrace, pos, seqNo, serverThreadLog, traceCache
Fields inherited from class java.io.FilterOutputStream
out
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
flushBuffer
(boolean commandEnd) Flush the internal buffer.int
int
void
setMaxAllowedPacket
(int maxAllowedPacket) void
startPacket
(int compressSeqNo) void
Write an empty packet.Methods inherited from class org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream
bufferIsDataAfterMark, checkMaxAllowedLength, checkRemainingSize, exceedMaxLength, flush, flushBufferStopAtMark, getMaxAllowedPacket, getOutputStream, isMarked, mark, permitTrace, resetMark, setServerThreadId, setTraceCache, write, write, write, write, write, write, write, write, write, writeBytes, writeBytesEscaped, writeEmptyPacket, writeFieldLength, writeInt, writeLong, writeShort
Methods inherited from class java.io.FilterOutputStream
close
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
Methods inherited from interface org.mariadb.jdbc.internal.io.output.PacketOutputStream
close
-
Field Details
-
logger
-
MAX_PACKET_LENGTH
private static final int MAX_PACKET_LENGTH- See Also:
-
EMPTY_ARRAY
private static final byte[] EMPTY_ARRAY -
MIN_COMPRESSION_SIZE
private static final int MIN_COMPRESSION_SIZE- See Also:
-
MIN_COMPRESSION_RATIO
private static final float MIN_COMPRESSION_RATIO- See Also:
-
header
private final byte[] header -
subHeader
private final byte[] subHeader -
maxPacketLength
private int maxPacketLength -
compressSeqNo
private int compressSeqNo -
remainingData
private byte[] remainingData -
lastPacketExactMaxPacketLength
private boolean lastPacketExactMaxPacketLength
-
-
Constructor Details
-
CompressPacketOutputStream
-
-
Method Details
-
getMaxPacketLength
public int getMaxPacketLength()- Specified by:
getMaxPacketLength
in classAbstractPacketOutputStream
-
setMaxAllowedPacket
public void setMaxAllowedPacket(int maxAllowedPacket) - Specified by:
setMaxAllowedPacket
in interfacePacketOutputStream
- Specified by:
setMaxAllowedPacket
in classAbstractPacketOutputStream
-
startPacket
public void startPacket(int compressSeqNo) - Specified by:
startPacket
in interfacePacketOutputStream
- Specified by:
startPacket
in classAbstractPacketOutputStream
-
initialPacketPos
public int initialPacketPos() -
flushBuffer
Flush the internal buffer.Compression add a 7 header :
- 3 byte compression length
- 1 byte compress sequence number
- 3 bytes uncompress length
in case packet isn't compressed (last 3 bytes == 0):
- 3 byte uncompress length
- 1 byte compress sequence number
- 3 bytes with 0 value
Content correspond to standard content.
- 3 byte length
- 1 byte sequence number (!= than compress sequence number)
- sub-content
Problem is when standard content is bigger than 16mb : content will not send 4byte standard header + 16mb content, since packet are limited to 16mb then 4 bytes standard header + 16mb - 4 bytes content. the ending 4 bytes are waiting to be send. next packet will then send the waiting data before next packet, putting more waiting data is needed. if ending data is exactly MAX_PACKET_LENGTH length, then an empty packet must be send.
- Specified by:
flushBuffer
in classAbstractPacketOutputStream
- Parameters:
commandEnd
- command end- Throws:
IOException
- id connection error occur.
-
writeEmptyPacket
Write an empty packet.- Specified by:
writeEmptyPacket
in interfacePacketOutputStream
- Specified by:
writeEmptyPacket
in classAbstractPacketOutputStream
- Throws:
IOException
- if socket error occur.
-