原文链接
https://code.google.com/archive/p/javastruct/
翻译用工具
翻译使用的是个人免费版Transmate
译文
javastruct
一个将java对象与C结构体互转的库.
Javastruct是什么
Javastruct是一个用于将C或C++结构体当作java对象使用的库.
它用于做什么?
详情请参考 Wiki 页面
这个库能很好地用于java程序与嵌入式设备或其他C或C++程序之间的通讯.它同样能作为一种简单但空间高效的序列化方法.
支持基础类型,数组,C 字符串和嵌套类. 支持大端和小端字节顺序. javastruct也能处理那些长度在其他字段中定义的字段,使用数组长度标记声明. 请参考wiki相关章节的例子和文档.
如何使用JavaStruct
类应该标记为 StructClass 声明, 字段也必须被标记以作为结构化字段使用.
查看以下测试类以更细节性的学习使用方法.一个简单的例子:
@StructClass
public class Foo{
@StructField(order = 0)
public byte b;
@StructField(order = 1)
public int i;
}
try{
// Pack the class as a byte buffer
Foo f = new Foo();
f.b = (byte)1;
f.i = 1;
byte[] b = JavaStruct.pack(f);
// Unpack it into an object
Foo f2 = new Foo();
JavaStruct.unpack(f2, b);
} catch(StructException e){ }
性能
对于简单的类,JavaStruct比Java序列化更快,对于复杂的和内部对象,通常与Java序列化有相同的性能.自然地,JavaStruct有2-3倍更小的输出.
未来的工作
- 更好的命名和一致的界面类
- 更详细的文档
- 基于ByteBuffer的结构体系列化(当前是基于stream)
- 更好的性能
- 更多的单元测试
- 支持数据对齐
- 位域
- 组合体
要求
具有Java 5 或更高版本JVM的任何操作系统
相似的项目
Jean-Marie Dautelle 的 Javolution 也有一个优秀的结构体实现.Javolution 结构体使用特定的类来代表域,JavaStruct有一个不同的方法,使用POJO的和Java 5的声明.