Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lijianghuflute
canal
提交
b6090da0
canal
项目概览
lijianghuflute
/
canal
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
canal
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b6090da0
编写于
6月 27, 2017
作者:
L
luoyaogui
提交者:
GitHub
6月 27, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update PacketManager.java
上级
9ea88c78
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
31 deletion
+8
-31
driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/utils/PacketManager.java
...a/otter/canal/parse/driver/mysql/utils/PacketManager.java
+8
-31
未找到文件。
driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/utils/PacketManager.java
浏览文件 @
b6090da0
package
com.alibaba.otter.canal.parse.driver.mysql.utils
;
import
java.io.IOException
;
import
java.nio.ByteBuffer
;
import
com.alibaba.otter.canal.parse.driver.mysql.packets.HeaderPacket
;
import
com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannel
;
...
...
@@ -10,48 +9,26 @@ public abstract class PacketManager {
public
static
HeaderPacket
readHeader
(
SocketChannel
ch
,
int
len
)
throws
IOException
{
HeaderPacket
header
=
new
HeaderPacket
();
header
.
fromBytes
(
readBytesAsBuffer
(
ch
,
len
).
array
(
));
header
.
fromBytes
(
ch
.
read
(
len
));
return
header
;
}
public
static
ByteBuffer
readBytesAsBuffer
(
SocketChannel
ch
,
int
len
)
throws
IOException
{
ByteBuffer
buffer
=
ByteBuffer
.
allocate
(
len
);
while
(
buffer
.
hasRemaining
())
{
int
readNum
=
ch
.
read
(
buffer
);
if
(
readNum
==
-
1
)
{
throw
new
IOException
(
"Unexpected End Stream"
);
}
}
return
buffer
;
}
public
static
byte
[]
readBytes
(
SocketChannel
ch
,
int
len
)
throws
IOException
{
return
readBytesAsBuffer
(
ch
,
len
).
array
(
);
return
ch
.
read
(
len
);
}
/**
* Since We r using blocking IO, so we will just write once and assert the
* length to simplify the read operation.<br>
* If the block write doesn't work as we expected, we will change this
* implementation as per the result.
*
* @param ch
* @param len
* @return
* @throws IOException
*/
public
static
void
write
(
SocketChannel
ch
,
byte
[]...
srcs
)
throws
IOException
{
public
static
void
writePkg
(
SocketChannel
ch
,
byte
[]...
srcs
)
throws
IOException
{
ch
.
writeChannel
(
srcs
);
}
public
static
void
write
(
SocketChannel
ch
,
byte
[]
body
)
throws
IOException
{
write
(
ch
,
body
,
(
byte
)
0
);
public
static
void
write
Body
(
SocketChannel
ch
,
byte
[]
body
)
throws
IOException
{
writeBody0
(
ch
,
body
,
(
byte
)
0
);
}
public
static
void
write
(
SocketChannel
ch
,
byte
[]
body
,
byte
packetSeqNumber
)
throws
IOException
{
public
static
void
write
Body0
(
SocketChannel
ch
,
byte
[]
body
,
byte
packetSeqNumber
)
throws
IOException
{
HeaderPacket
header
=
new
HeaderPacket
();
header
.
setPacketBodyLength
(
body
.
length
);
header
.
setPacketSequenceNumber
(
packetSeqNumber
);
write
(
ch
,
header
.
toBytes
(),
body
);
ch
.
writeChannel
(
header
.
toBytes
(),
body
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录