mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-20 17:29:51 +00:00
Trip.Leg: Implement custom serialization for List<Point> path, because it was wasting a lot of space.
This commit is contained in:
parent
ae7146050a
commit
e9f06c0741
1 changed files with 36 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2010-2015 the original author or authors.
|
* Copyright the original author or authors.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,7 +20,12 @@ package de.schildbach.pte.dto;
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import java.io.EOFException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -299,7 +304,7 @@ public final class Trip implements Serializable {
|
||||||
|
|
||||||
public final Location departure;
|
public final Location departure;
|
||||||
public final Location arrival;
|
public final Location arrival;
|
||||||
public List<Point> path;
|
public transient List<Point> path; // custom serialization, to save space
|
||||||
|
|
||||||
public Leg(final Location departure, final Location arrival, final List<Point> path) {
|
public Leg(final Location departure, final Location arrival, final List<Point> path) {
|
||||||
this.departure = checkNotNull(departure);
|
this.departure = checkNotNull(departure);
|
||||||
|
@ -318,6 +323,35 @@ public final class Trip implements Serializable {
|
||||||
|
|
||||||
/** Maximum time occurring in this leg. */
|
/** Maximum time occurring in this leg. */
|
||||||
public abstract Date getMaxTime();
|
public abstract Date getMaxTime();
|
||||||
|
|
||||||
|
private void writeObject(final ObjectOutputStream os) throws IOException {
|
||||||
|
os.defaultWriteObject();
|
||||||
|
if (path != null) {
|
||||||
|
os.writeInt(path.size());
|
||||||
|
for (final Point p : path) {
|
||||||
|
os.writeInt(p.getLatAs1E6());
|
||||||
|
os.writeInt(p.getLonAs1E6());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
os.writeInt(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readObject(final ObjectInputStream is) throws ClassNotFoundException, IOException {
|
||||||
|
is.defaultReadObject();
|
||||||
|
try {
|
||||||
|
final int pathSize = is.readInt();
|
||||||
|
if (pathSize >= 0) {
|
||||||
|
path = new ArrayList<>(pathSize);
|
||||||
|
for (int i = 0; i < pathSize; i++)
|
||||||
|
path.add(Point.from1E6(is.readInt(), is.readInt()));
|
||||||
|
} else {
|
||||||
|
path = null;
|
||||||
|
}
|
||||||
|
} catch (final EOFException x) {
|
||||||
|
path = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final static class Public extends Leg {
|
public final static class Public extends Leg {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue