问题标签 [preon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1657 浏览

java - 在 Preon 中解析可变记录长度

我正在尝试使用Preon来解析二进制文件,这些文件被构造为一系列可变长度记录。对于每条记录,都有一个数字指定记录长度(以字节为单位)。

这是我正在尝试做的简化版本:

因此,numberOfRecords 指定文件中的记录数,recordLength 指定每条记录的长度。问题是 Preon 无法解析 Record 中的 recordLength,尽管 numberOfRecords 在 BinFile 中工作正常。

这是我得到的例外:

如果我将 size="recordLength" 更改为常数,例如 size="42",我不会得到异常(但当然,记录长度必须始终相同)。

我是否有其他方法可以使记录长度可变,或者我应该以不同的方式组织事物?

如果有人感兴趣,这是我使用过的 JUnit 测试:

0 投票
1 回答
634 浏览

java - Preon中的有符号和无符号整数

我想将Preon用于与用 C 编写的服务器进行通信的项目。协议取决于机器的本机字节序(您可以java.nio.ByteOrder.getNative()在假设 JVM 与服务器具有相同字节序的情况下解决这个问题)并uint64_t用于数据长度和int32_t状态码(负值表示错误)。

我在 Preon 文档中找不到有关签名的信息。我快速查看了源代码,发现nl.flotsam.preon.buffer.DefaultBitBuffer使用了带符号的移位(<<>>),并且几个方法的 javadoc 注释nl.flotsam.preon.buffer.BitBuffer也表明它使用有符号整数,但 javadoc 注释nl.flotsam.preon.buffer.BitBufferBitBuffer使用无符号整数。这让我很困惑。

Preon 的默认整数格式是什么?我如何表示uint64_tint32_t

0 投票
1 回答
545 浏览

java - 使用 Preon 的字节对齐问题

大家好:)我目前正在使用preon进行业余项目,我遇到了以下问题:我正在尝试使用以下代码读取固定长度的字符串:

文件规范需要一个可变填充,因此下一个块的偏移量是 4 的倍数。例如,如果 string_size = 5,则将添加 3 个空字节,依此类推。我最初认为 @ByteAlign 注释正是这样做的,但是,查看源代码,我意识到事实并非如此。

我试图快速解决这个问题:

可悲的是,Limbo 似乎不支持“%”运算符。有没有解决的办法?

(另外,我在哪里/如何获得最新版本?)提前致谢。

0 投票
1 回答
721 浏览

stream - 可变长度序列,第一位指示序列结束,preon

您将如何解析可变长度的字节序列,其中第一位(BigEndian)指示是否使用 Preon 跟随另一个字节?

例子

笔记

  • 指示下一个的第一位在最终有效载荷中被丢弃
  • 这篇文章使用的 Preon 版本是 1.1

结果字节(十进制)

{ 114, 63, 63, 63, 80 }

已经试过了

@BoundList + @Choices(有条件)

Limbo exp lang 不支持方法调用,所以你无法检测到流的结束(前一个需要有符号1,当前块需要是最后一个,即符号需要为0)

使用@If 的递归方法

出于某种原因,例如上面提到的,即使应该有 3 个,Preon 也只会解析 2 个 Entry 实例(父和子)。

谢谢。

0 投票
2 回答
795 浏览

java - 安卓上的 Preon

我试图在 Android 2.1 上运行一个示例 Preon 应用程序,但没有成功。我想知道是否可以在 Android 上运行 Preon 应用程序。让 Preon 框架 Dalvik 友好有多难?

Preon 是一个 Java 库,用于以声明的方式为比特流压缩数据构建编解码器。想想 JAXB 或 Hibernate,然后是 Wilfred Springer 编写的二进制编码数据。


以下是我尝试在 Android 中运行使用 Preon 的简单应用程序时的发现:

Preon 依赖于 Pecia。Pecia 间接依赖于 stax-api,Android 中不支持开箱即用。Preon核心处理中使用的是stax-api吗?我可以从 Preon 依赖项中排除 stax-api 吗?

在从依赖项中排除 pecia 之后(不知道后果),我发现 preon 带来了 log4j.properties 文件的多个副本。我建议将 log4j.properties 文件移动到 preon 和 pecia 项目上的 /src/test/resources 目录,以避免将它们与类一起使用。

由于重复的 log4j.properties 文件,android-maven-plugin 在包目标处失败,并显示以下消息:

[信息] java.util.zip.ZipException:重复条目:log4j.properties

[信息] --------------------------------------------- -------------------------

[信息] 构建失败

[信息] --------------------------------------------- -------------------------

[INFO] 总时间:19.717s

[INFO] 完成于:2011 年 3 月 23 日星期三 14:30:55 PST

[INFO] 最终内存:7M/62M

0 投票
2 回答
1548 浏览

java - Preon 的 Java 或 C++ 等价物?

Preon是一个用于创建二进制编解码器的 Java 库:您只需在类的数据成员中放置注释,了解它们与位字段的对应关系(例如,用于某个字段的位数),并且基于此类,该库构建一个编解码器能够创建从二进制输入流中读取其数据的类的实例的对象。

由于许可问题(它在 GPL 下分发),我无法使用它。

在 Java 或 C++ 中是否有任何具有等效或类似功能的库?

0 投票
0 回答
264 浏览

java - How can I model a Array with Arrays in preon

I have a problem here with problem I tried several things I just can't get it to init probably.

My ArrayObject has List of SerializedData which can hold a ArrayObject (circular dependency). I tried using @LazyLoading but this doesn't help.

0 投票
1 回答
441 浏览

java - 如何根据第一个字节解析不同的数据包类型

我正在尝试使用 preon 解析 mysql 结果数据包。数据包看起来像这样:

nn xx yy yy yy zz zz zz

我这样解析

我尝试使用@BoundObject这样的注释:

OkResponsePayload它对and工作得很好ErrorResponsePayload,但ResultResponsePayload Codec不再访问用于前缀标识的第一个字节。

我的第一个想法是编写 custom Codec<ResponsePacket>,在 decode 里面我可以读取第一个字节,根据它的值我可以实例化新的编解码器来解析缓冲区的其余部分。

在这种情况下的问题是我不会有关于包(nn)的总大小的信息,这有时在表达式中很有用。此外,看起来还有其他类似这样的结构(第一个字节决定类型),这将需要大量手工编写的代码。

我希望有人可以向我展示一个更清洁的解决方案。

0 投票
2 回答
3696 浏览

java - 使用java读取文件头

我正在尝试使用 java 读取文件头,我想获取文件类型(图像、音频等)。我尝试了很多例子,但似乎没有任何效果。我尝试了 preon 并没有运气,有人可以告诉我如何使用 preon 或其他 Java api 读取文件头,谢谢...

0 投票
2 回答
516 浏览

java - preon 如何使用 bean 属性?

我需要读取一个二进制文件,其中字节数组的大小取决于一个可选值以及一个常数。如何使用 Preon 实现这一目标?

似乎字节数组大小计算不能是有条件的,即。大小="adaptationFieldControl==0b10 || 自适应字段控制==0b11 ? 184-adaptationFieldLength : 184"

使用一种方法(参见下面的示例)计算动态大小会使 Preon 失败,原因是:org.codehaus.preon.el.BindingException:无法为名为 getPayloadLength 的绑定数据创建绑定。

...