0

現在のプロジェクトでは、出力 XML をバイナリ形式 (.dat など) で書き込むために、XML データを ByteBuffer に書き込む必要があります。

私のxmlの要素に対応するJavaオブジェクトごとに、属性の型(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を使用するマーシャラーのように)、任意のオブジェクトに対して自動的にそれを行うことができるライブラリ/クラスはありますか?

ありがとう

4

0 に答える 0