对于当前项目,我需要将XML数据写入ByteBuffer以二进制格式(例如.dat)编写输出XML。
是否有一个lib或类,对于每个对应于我的xml元素的java对象,将其属性的值写入ByteBuffer(或某些类似的实现),同时尊重属性类型(int - > buffer) .putInt(intAttribute)...
PS:理想情况下,我需要这种方法将每个元素序列的大小放在这些元素的值之前
编辑:这是我想要的具体例子
假设我有以下定义walker_template xml元素的类
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"routestep"
})
@XmlRootElement(name = "walker_template")
public class WalkerTemplate {
protected List<Routestep> routestep;
@XmlAttribute(name = "route_id")
protected String routeId;
public List<Routestep> getRoutestep() {
if (routestep == null) {
routestep = new ArrayList<Routestep>();
}
return this.routestep;
}
RouteStep是:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
@XmlRootElement(name = "routestep")
public class Routestep {
@XmlAttribute
protected Integer step;
@XmlAttribute
protected Float x;
@XmlAttribute
protected Float y;
@XmlAttribute
protected Float z;
这些类定义了我通常使用JAXB编组的对象,然后将其写入输出文件。
marshaller.marshal(templatesToWrite, myXMLStreamWriter);
我现在想要的是以二进制格式写出这些对象的数据。
这样做的方法应该是这样的(对于这个例子):
ByteBuffer buffer = new ByteBuffer.allocate(size);
buffer.putInt(myWalkerTemplate.getRouteId());
buffer.putInt(myWalkerTemplate.getRouteSteps().size());
for (Routestep step : myWalkerTemplate.getRouteSteps()) {
buffer.putFloat(step.getX());
buffer.putFloat(step.getY());
buffer.putFloat(step.getZ());
}
那么,是否有任何库/类可以自动为任何对象执行,当然这些对象的类(如使用JAXBContext的Marshaller)。
由于