gpt4 book ai didi

java - 在 Java 中标记二进制数据

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:42 25 4
gpt4 key购买 nike

我正在编写一些代码来处理二进制数据流。它以字节数组表示的 block 形式接收。结合起来,字节数组表示消息的顺序流,每个消息都以相同的常量终止符值(在我的例子中为 0xff)结尾。但是,终止符值可以出现在任何给定数据 block 中的任何位置。单个 block 可以包含消息的一部分、多条消息以及介于两者之间的任何内容。

以下是由此处理的数据的一小部分示例:

[0x00, 0x0a, 0xff, 0x01]
[0x01, 0x01]
[0xff, 0x01, 0xff]

此数据应转换为这些消息:

[0x00, 0x0a, 0xff]
[0x01, 0x01, 0x01, 0xff]
[0x01, 0xff]

我已经编写了一个小类来处理这个问题。它有一种方法可以添加一些字节数组格式的数据,然后将其放入缓冲区数组中。当遇到终止符时,字节数组被清除,并将完整的消息放入消息队列中,可以使用 hasNext() 和 next() 方法(类似于迭代器)访问消息队列。

这个解决方案工作正常,但当我完成它时,我意识到我可以使用的已建立库中可能已经有一些稳定、高性能和经过测试的代码。

所以我的问题是 - 您是否知道有这样一个实用程序库,或者标准 Java 6 库中是否已经可以做到这一点?

最佳答案

我认为您不需要框架,因为自定义解析器已经足够简单了。

InputStream in = new ByteArrayInputStream(new byte[]{
0x00, 0x0a, (byte) 0xff,
0x01, 0x01, 0x01, (byte) 0xff,
0x01, (byte) 0xff});

ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int b; (b = in.read()) >= 0; ) {
baos.write(b);
if (b == 0xff) {
byte[] bytes = baos.toByteArray();
System.out.println(Arrays.toString(bytes));
baos = new ByteArrayOutputStream();
}
}

打印为 (byte) 0xFF == -1

[0, 10, -1]
[1, 1, 1, -1]
[1, -1]

关于java - 在 Java 中标记二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12840815/

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