mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
77 lines
2.3 KiB
Java
77 lines
2.3 KiB
Java
package VMSConnection.Encoding;
|
|
|
|
import VMSConnection.Utils.ByteHelper;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.channels.SocketChannel;
|
|
|
|
/*
|
|
* @Author: Wang Feng
|
|
* @Description:
|
|
* @Version: 1.0.0
|
|
* @Date: 19:47 2021/6/24
|
|
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
|
*/
|
|
public class BC_Encoder {
|
|
/**
|
|
* Encode 将消息编码: 加一个长度头
|
|
* @param message
|
|
* @return
|
|
*/
|
|
public static byte[] Encode(byte[] message){
|
|
byte[] length= ByteHelper.int32ToByteArray(message.length);
|
|
byte[] pkg=new byte[4+ message.length];
|
|
System.arraycopy(length,0,pkg,0,4);
|
|
System.arraycopy(message,0,pkg,4,message.length);
|
|
return pkg;
|
|
}
|
|
|
|
/**
|
|
* 解码消息:去掉长度头
|
|
* @param channel
|
|
* @return
|
|
*/
|
|
public static byte[] DecodeTcp(SocketChannel channel){
|
|
if(!channel.isConnected()){
|
|
// 重新连接
|
|
try {
|
|
System.out.println("DecodeTcp-重新连接: "+channel.getRemoteAddress());
|
|
channel.connect(channel.getRemoteAddress());
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
System.out.println("start read...");
|
|
// 读取消息的长度
|
|
byte[] buf=new byte[4];
|
|
try {
|
|
int revL=channel.socket().getInputStream().read(buf);
|
|
// channel.read(ByteBuffer.wrap(buf));
|
|
if(revL<0){
|
|
System.out.println("read len < 0");
|
|
return null;
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
int length=ByteHelper.byteArrayToInt32(buf);
|
|
System.out.println("read 111: "+length);
|
|
// 读取真正的消息数据
|
|
byte[] pkg=new byte[length];
|
|
try {
|
|
int revL=channel.socket().getInputStream().read(pkg);
|
|
if(revL<0){
|
|
System.out.println("read len < 0");
|
|
return null;
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
System.out.println("read 222: "+new String(pkg));
|
|
return pkg;
|
|
}
|
|
}
|