@Override
    public Serializable read(final MySQLBinlogColumnDef columnDef, final MySQLPacketPayload payload) {
        int time = payload.getByteBuf().readUnsignedMedium();
        if (0x800000 == time) {
            return MySQLTimeValueUtils.ZERO_OF_TIME;
        }
        MySQLFractionalSeconds fractionalSeconds = new MySQLFractionalSeconds(columnDef.getColumnMeta(), payload);
        int hour = (time >> 12) % (1 << 10);
        int minute = (time >> 6) % (1 << 6);
        int second = time % (1 << 6);
        return LocalTime.of(hour, minute, second).withNano(fractionalSeconds.getNanos());
    }
@Test
    void assertReadWithFraction1() {
        columnDef.setColumnMeta(1);
        when(payload.getByteBuf()).thenReturn(byteBuf);
        when(payload.readInt1()).thenReturn(90);
        when(byteBuf.readUnsignedMedium()).thenReturn(0x800000 | (0x10 << 12) | (0x08 << 6) | 0x04);
        assertThat(new MySQLTime2BinlogProtocolValue().read(columnDef, payload), is(LocalTime.of(16, 8, 4).withNano(900000000)));
    }