我有一个文件需要通过UDP可靠地传输(我知道TCP是更好的选择)。因此,我需要校验和来验证数据的一致性。
在发件人处,我使用以下代码格式化了数据包:
static class Generator {
public static byte[] format(String type, int sequence_no, byte[] data) {
String header = type + "|" + sequence_no + "|" + Validator.getChecksum(data) + "|";
String temp = new String(data, 0, data.length);
String combine = header + temp;
return combine.getBytes();
}
}
这将返回我将发送的数据的最后一个字节。
static class Validator {
public static String getChecksum(byte[] bytes) {
CRC32 crc = new CRC32();
crc.update(bytes, 0, bytes.length);
return crc.getValue() + "";
}
}
BufferedFileReader会将数据读入字节数组,该字节数组将发送到此Generate.format方法以附加相应的标题信息。
然而,在我的接收器端,我似乎无法获得相同数量的字节,尽管数据“看起来相同”
String raw = new String(packet.getData(), 0, packet.getLength());
String[] split = raw.split("\\|");
System.out.println(split[3].getBytes().length);
我怀疑缓冲区中的字节不完全等同于接收到的字符串,导致接收器获得不同的输出。
有人发现错了吗?