gpt4 book ai didi

java - 从输入流中解码字节

转载 作者:行者123 更新时间:2023-12-01 12:27:23 24 4
gpt4 key购买 nike

如果我有一个使用以下格式编码的字节流:

0x20 Length D_1 D_2 ... D_n CS

0x20...marks the beginning of a data frame
Length...number of bytes following
D_1-D_n...data bytes (interpreted as signed ints)
CS...One Byte Checksum

示例:

0x20 0x05 0x01 0x02 0xD1 0xA1 0xAF
0x20 0x05 0x12 0x03 0x02 0x3A 0xF2
...
...

如何以常见且高效的方式从 InputStream 解码此字节流?我的想法是使用 BufferedInputStream 和以下过程(伪代码):

BufferedInputStream bufIS = new BufferedInputStream(mInStream); 
while (true ) {
byte startFrame = bufIS.read();

if(startFrame == 0x20) { //first byte must mark the beginning of a data frame
int length = bufIS.read();
byte dataframe[] = new bye[length];
for (int i = 0; i<length i++) { //read data bytes
dateframe[i] = bufIS.read();
}

if(verifyChecksum(bufIS.read()) postEvent(dataframe);
}
}

这是从 InputStream 接收数据帧的适当方法吗?我想不出更好的解决方案。还有一个替代的 read(byte[] b, int off, int len) 方法,它从流中读取字节 block ,但不能保证 len 字节数是阅读,所以我认为这对我的情况没有帮助。

最佳答案

Id 使用带有自定义反序列化的 ObjectInputStream。

因此,您需要编写一个具有整数列表并实现 readObject 的类,这样当给定输入流时,它会读取常量(并丢弃它),然后是长度,然后是 n 个整数,然后是校验和,并可选择验证它。

这将所有代码保留在一个位置,并允许您从数据流中读取完全形成的对象。

关于java - 从输入流中解码字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com