Skip to content

Commit d45f65b

Browse files
committed
Optimize packet header read by reducing number of read operations
1 parent 5950c5e commit d45f65b

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/main/java/com/github/shyiko/mysql/binlog/io/RawEventsReader.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,17 @@ public RawBinaryLogEvent nextRawEvent() throws IOException {
5555
}
5656

5757
private int readPacketLength() throws IOException {
58-
// Read size and skip sequence number.
59-
int packetLength = inputStream.readInteger(3);
60-
inputStream.skip(1);
58+
// Read packet size (3 bytes), sequence number (1 byte, ignored) and marker (1 byte).
59+
// We read all data at once to reduce the number of reads from Socket stream.
60+
byte[] packetHeaderBytes = new byte[5];
61+
inputStream.fill(packetHeaderBytes, 0, packetHeaderBytes.length);
62+
63+
int packetLength = 0;
64+
for (int i = 0; i < 3; ++i) {
65+
packetLength |= (packetHeaderBytes[i] & 0xFF) << (i << 3);
66+
}
6167

62-
int marker = inputStream.read();
68+
int marker = packetHeaderBytes[4] & 0xFF;
6369
if (marker == 0xFF) {
6470
ErrorPacket errorPacket = new ErrorPacket(inputStream.read(packetLength - 1));
6571
throw new ServerException(errorPacket.getErrorMessage(), errorPacket.getErrorCode(),

0 commit comments

Comments
 (0)