53 lines
1.4 KiB
Java
53 lines
1.4 KiB
Java
package org.insa.graph.io;
|
|
|
|
import java.io.DataOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.Arrays;
|
|
|
|
import org.insa.graph.Arc;
|
|
import org.insa.graph.Path;
|
|
|
|
/**
|
|
* Implementation of {@link PathWriter} to write paths in binary format.
|
|
*
|
|
*/
|
|
public class BinaryPathWriter extends BinaryWriter implements PathWriter {
|
|
|
|
/**
|
|
* Create a new BinaryPathWriter that writes to the given output stream.
|
|
*
|
|
* @param dos Output stream to write to.
|
|
*/
|
|
public BinaryPathWriter(DataOutputStream dos) {
|
|
super(dos);
|
|
}
|
|
|
|
@Override
|
|
public void writePath(Path path) throws IOException {
|
|
|
|
// Write magic number and version.
|
|
dos.writeInt(BinaryPathReader.MAGIC_NUMBER);
|
|
dos.writeInt(BinaryPathReader.VERSION);
|
|
|
|
// Write map id.
|
|
byte[] bytes = Arrays.copyOf(path.getGraph().getMapId().getBytes("UTF-8"),
|
|
BinaryGraphReader.MAP_ID_FIELD_LENGTH);
|
|
dos.write(bytes);
|
|
|
|
// Write number of arcs
|
|
dos.writeInt(path.getArcs().size() + 1);
|
|
|
|
// Write origin / destination.
|
|
dos.writeInt(path.getOrigin().getId());
|
|
dos.writeInt(path.getDestination().getId());
|
|
|
|
// Write nodes.
|
|
dos.writeInt(path.getOrigin().getId());
|
|
for (Arc arc: path.getArcs()) {
|
|
dos.writeInt(arc.getDestination().getId());
|
|
}
|
|
|
|
dos.flush();
|
|
}
|
|
|
|
}
|