Class AbstractPacketOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- java.io.FilterOutputStream
-
- org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.io.Flushable,java.lang.AutoCloseable,PacketOutputStream
- Direct Known Subclasses:
CompressPacketOutputStream,StandardPacketOutputStream
public abstract class AbstractPacketOutputStream extends java.io.FilterOutputStream implements PacketOutputStream
-
-
Field Summary
Fields Modifier and Type Field Description private static byteBACKSLASHprotected byte[]bufprivate booleanbufferContainDataAfterMarkprotected longcmdLengthprivate static byteDBL_QUOTEprivate static intLARGE_BUFFER_SIZEprivate intmarkprotected intmaxAllowedPacketprotected intmaxQuerySizeToLogprivate static intMEDIUM_BUFFER_SIZEprotected booleanpermitTraceprotected intposprivate static byteQUOTEprotected intseqNoprotected java.lang.StringserverThreadLogprivate static intSMALL_BUFFER_SIZEprotected longthreadIdprotected LruTraceCachetraceCacheprivate static byteZERO_BYTE
-
Constructor Summary
Constructors Constructor Description AbstractPacketOutputStream(java.io.OutputStream out, int maxQuerySizeToLog, long threadId)Common feature to write data into socket, creating MariaDB Packet.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleanbufferIsDataAfterMark()voidcheckMaxAllowedLength(int length)Count query size.booleancheckRemainingSize(int len)booleanexceedMaxLength()voidflush()Send packet to socket.protected abstract voidflushBuffer(boolean commandEnd)voidflushBufferStopAtMark()Flush to last mark.intgetMaxAllowedPacket()abstract intgetMaxPacketLength()java.io.OutputStreamgetOutputStream()private voidgrowBuffer(int len)Buffer growing use 4 size only to avoid creating/copying that are expensive operations.booleanisMarked()voidmark()voidpermitTrace(boolean permitTrace)byte[]resetMark()Reset mark flag and send bytes after mark flag.abstract voidsetMaxAllowedPacket(int maxAllowedPacket)voidsetServerThreadId(long serverThreadId, java.lang.Boolean isMaster)Set server thread id.voidsetTraceCache(LruTraceCache traceCache)abstract voidstartPacket(int seqNo)voidwrite(byte[] arr)voidwrite(byte[] arr, int off, int len)Write byte array to buffer.voidwrite(int value)Write byte into buffer, flush buffer to socket if needed.voidwrite(java.io.InputStream is, boolean escape, boolean noBackslashEscapes)Write stream into socket.voidwrite(java.io.InputStream is, long length, boolean escape, boolean noBackslashEscapes)Write stream into socket.voidwrite(java.io.Reader reader, boolean escape, boolean noBackslashEscapes)Write reader into socket.voidwrite(java.io.Reader reader, long length, boolean escape, boolean noBackslashEscapes)Write reader into socket.voidwrite(java.lang.String str)voidwrite(java.lang.String str, boolean escape, boolean noBackslashEscapes)Write string to socket.voidwriteBytes(byte value, int len)Write byte value, len times into buffer.voidwriteBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes)Write escape bytes to socket.abstract voidwriteEmptyPacket()voidwriteEmptyPacket(int seqNo)Send empty packet.voidwriteFieldLength(long length)Write field length into buffer, flush socket if needed.voidwriteInt(int value)Write int value into buffer.voidwriteLong(long value)Write long value into buffer.voidwriteShort(short value)Write short value into buffer.-
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, initialPacketPos
-
-
-
-
Field Detail
-
QUOTE
private static final byte QUOTE
- See Also:
- Constant Field Values
-
DBL_QUOTE
private static final byte DBL_QUOTE
- See Also:
- Constant Field Values
-
ZERO_BYTE
private static final byte ZERO_BYTE
- See Also:
- Constant Field Values
-
BACKSLASH
private static final byte BACKSLASH
- See Also:
- Constant Field Values
-
SMALL_BUFFER_SIZE
private static final int SMALL_BUFFER_SIZE
- See Also:
- Constant Field Values
-
MEDIUM_BUFFER_SIZE
private static final int MEDIUM_BUFFER_SIZE
- See Also:
- Constant Field Values
-
LARGE_BUFFER_SIZE
private static final int LARGE_BUFFER_SIZE
- See Also:
- Constant Field Values
-
maxQuerySizeToLog
protected final int maxQuerySizeToLog
-
buf
protected byte[] buf
-
pos
protected int pos
-
maxAllowedPacket
protected int maxAllowedPacket
-
cmdLength
protected long cmdLength
-
permitTrace
protected boolean permitTrace
-
seqNo
protected int seqNo
-
serverThreadLog
protected java.lang.String serverThreadLog
-
traceCache
protected LruTraceCache traceCache
-
mark
private int mark
-
bufferContainDataAfterMark
private boolean bufferContainDataAfterMark
-
threadId
protected long threadId
-
-
Constructor Detail
-
AbstractPacketOutputStream
public AbstractPacketOutputStream(java.io.OutputStream out, int maxQuerySizeToLog, long threadId)Common feature to write data into socket, creating MariaDB Packet.- Parameters:
out- socket outputStreammaxQuerySizeToLog- maximum query size to logthreadId- thread id
-
-
Method Detail
-
getMaxPacketLength
public abstract int getMaxPacketLength()
-
startPacket
public abstract void startPacket(int seqNo)
- Specified by:
startPacketin interfacePacketOutputStream
-
flushBuffer
protected abstract void flushBuffer(boolean commandEnd) throws java.io.IOException- Throws:
java.io.IOException
-
growBuffer
private void growBuffer(int len) throws java.io.IOExceptionBuffer growing use 4 size only to avoid creating/copying that are expensive operations. possible size- SMALL_BUFFER_SIZE = 8k (default)
- MEDIUM_BUFFER_SIZE = 128k
- LARGE_BUFFER_SIZE = 1M
- getMaxPacketLength = 16M (+ 4 is using no compression)
- Parameters:
len- length to add- Throws:
java.io.IOException
-
writeEmptyPacket
public void writeEmptyPacket(int seqNo) throws java.io.IOExceptionSend empty packet.- Specified by:
writeEmptyPacketin interfacePacketOutputStream- Parameters:
seqNo- packet sequence- Throws:
java.io.IOException- if socket error occur.
-
writeEmptyPacket
public abstract void writeEmptyPacket() throws java.io.IOException- Specified by:
writeEmptyPacketin interfacePacketOutputStream- Throws:
java.io.IOException
-
flush
public void flush() throws java.io.IOExceptionSend packet to socket.- Specified by:
flushin interfacejava.io.Flushable- Specified by:
flushin interfacePacketOutputStream- Overrides:
flushin classjava.io.FilterOutputStream- Throws:
java.io.IOException- if socket error occur.
-
checkRemainingSize
public boolean checkRemainingSize(int len)
- Specified by:
checkRemainingSizein interfacePacketOutputStream
-
checkMaxAllowedLength
public void checkMaxAllowedLength(int length) throws MaxAllowedPacketExceptionCount query size. If query size is greater than max_allowed_packet and nothing has been already send, throw an exception to avoid having the connection closed.- Specified by:
checkMaxAllowedLengthin interfacePacketOutputStream- Parameters:
length- additional length to query size- Throws:
MaxAllowedPacketException- if query has not to be send.
-
exceedMaxLength
public boolean exceedMaxLength()
- Specified by:
exceedMaxLengthin interfacePacketOutputStream
-
getOutputStream
public java.io.OutputStream getOutputStream()
- Specified by:
getOutputStreamin interfacePacketOutputStream
-
writeShort
public void writeShort(short value) throws java.io.IOExceptionWrite short value into buffer. flush buffer if too small.- Specified by:
writeShortin interfacePacketOutputStream- Parameters:
value- short value- Throws:
java.io.IOException- if socket error occur
-
writeInt
public void writeInt(int value) throws java.io.IOExceptionWrite int value into buffer. flush buffer if too small.- Specified by:
writeIntin interfacePacketOutputStream- Parameters:
value- int value- Throws:
java.io.IOException- if socket error occur
-
writeLong
public void writeLong(long value) throws java.io.IOExceptionWrite long value into buffer. flush buffer if too small.- Specified by:
writeLongin interfacePacketOutputStream- Parameters:
value- long value- Throws:
java.io.IOException- if socket error occur
-
writeBytes
public void writeBytes(byte value, int len) throws java.io.IOExceptionWrite byte value, len times into buffer. flush buffer if too small.- Specified by:
writeBytesin interfacePacketOutputStream- Parameters:
value- byte valuelen- number of time to write value.- Throws:
java.io.IOException- if socket error occur.
-
writeFieldLength
public void writeFieldLength(long length) throws java.io.IOExceptionWrite field length into buffer, flush socket if needed.- Specified by:
writeFieldLengthin interfacePacketOutputStream- Parameters:
length- field length- Throws:
java.io.IOException- if socket error occur.
-
write
public void write(int value) throws java.io.IOExceptionWrite byte into buffer, flush buffer to socket if needed.- Specified by:
writein interfacePacketOutputStream- Overrides:
writein classjava.io.FilterOutputStream- Parameters:
value- byte to send- Throws:
java.io.IOException- if socket error occur.
-
write
public void write(byte[] arr) throws java.io.IOException- Specified by:
writein interfacePacketOutputStream- Overrides:
writein classjava.io.FilterOutputStream- Throws:
java.io.IOException
-
write
public void write(byte[] arr, int off, int len) throws java.io.IOExceptionWrite byte array to buffer. If buffer is full, flush socket.- Specified by:
writein interfacePacketOutputStream- Overrides:
writein classjava.io.FilterOutputStream- Parameters:
arr- byte arrayoff- offsetlen- byte length to write- Throws:
java.io.IOException- if socket error occur
-
write
public void write(java.lang.String str) throws java.io.IOException- Specified by:
writein interfacePacketOutputStream- Throws:
java.io.IOException
-
write
public void write(java.lang.String str, boolean escape, boolean noBackslashEscapes) throws java.io.IOExceptionWrite string to socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
str- stringescape- must be escapenoBackslashEscapes- escape method- Throws:
java.io.IOException- if socket error occur
-
write
public void write(java.io.InputStream is, boolean escape, boolean noBackslashEscapes) throws java.io.IOExceptionWrite stream into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
is- inputStreamescape- must be escapenoBackslashEscapes- escape method- Throws:
java.io.IOException- if socket error occur
-
write
public void write(java.io.InputStream is, long length, boolean escape, boolean noBackslashEscapes) throws java.io.IOExceptionWrite stream into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
is- inputStreamlength- write lengthescape- must be escapenoBackslashEscapes- escape method- Throws:
java.io.IOException- if socket error occur
-
write
public void write(java.io.Reader reader, boolean escape, boolean noBackslashEscapes) throws java.io.IOExceptionWrite reader into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
reader- readerescape- must be escapenoBackslashEscapes- escape method- Throws:
java.io.IOException- if socket error occur
-
write
public void write(java.io.Reader reader, long length, boolean escape, boolean noBackslashEscapes) throws java.io.IOExceptionWrite reader into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
reader- readerlength- write lengthescape- must be escapenoBackslashEscapes- escape method- Throws:
java.io.IOException- if socket error occur
-
writeBytesEscaped
public void writeBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes) throws java.io.IOExceptionWrite escape bytes to socket.- Specified by:
writeBytesEscapedin interfacePacketOutputStream- Parameters:
bytes- byteslen- len to writenoBackslashEscapes- escape method- Throws:
java.io.IOException- if socket error occur
-
getMaxAllowedPacket
public int getMaxAllowedPacket()
- Specified by:
getMaxAllowedPacketin interfacePacketOutputStream
-
setMaxAllowedPacket
public abstract void setMaxAllowedPacket(int maxAllowedPacket)
- Specified by:
setMaxAllowedPacketin interfacePacketOutputStream
-
permitTrace
public void permitTrace(boolean permitTrace)
- Specified by:
permitTracein interfacePacketOutputStream
-
setServerThreadId
public void setServerThreadId(long serverThreadId, java.lang.Boolean isMaster)Set server thread id.- Specified by:
setServerThreadIdin interfacePacketOutputStream- Parameters:
serverThreadId- current server thread id.isMaster- is server master
-
setTraceCache
public void setTraceCache(LruTraceCache traceCache)
- Specified by:
setTraceCachein interfacePacketOutputStream
-
mark
public void mark()
- Specified by:
markin interfacePacketOutputStream
-
isMarked
public boolean isMarked()
- Specified by:
isMarkedin interfacePacketOutputStream
-
flushBufferStopAtMark
public void flushBufferStopAtMark() throws java.io.IOExceptionFlush to last mark.- Specified by:
flushBufferStopAtMarkin interfacePacketOutputStream- Throws:
java.io.IOException- if flush fail.
-
bufferIsDataAfterMark
public boolean bufferIsDataAfterMark()
- Specified by:
bufferIsDataAfterMarkin interfacePacketOutputStream
-
resetMark
public byte[] resetMark()
Reset mark flag and send bytes after mark flag.- Specified by:
resetMarkin interfacePacketOutputStream- Returns:
- bytes after mark flag
-
-