Gson ist bekannt und verwendet für seine Benutzerfreundlichkeit. Wenn Sie Geschwindigkeit wollen, müssen Sie sich die super beliebte Jackson Json anschauen.
Ich habe sowohl Gson als auch Jackson getestet und getestet und ich kann Ihnen sagen, dass Jackson in einigen Anwendungsfällen sowohl bei der Serialisierung als auch bei der Deserialisierung 15mal schneller ist, selbst bei sehr großen Objekten.
Um ein ähnliches Verhalten wie Json erhalte ich die folgenden Einstellungen verwenden
public enum JsonMapper {
INSTANCE;
private final ObjectMapper mapper;
private JsonMapper() {
mapper = new ObjectMapper();
VisibilityChecker<?> visibilityChecker = mapper.getSerializationConfig().getDefaultVisibilityChecker();
mapper.setVisibilityChecker(visibilityChecker
.withFieldVisibility(Visibility.ANY)
.withCreatorVisibility(Visibility.NONE)
.withGetterVisibility(Visibility.NONE)
.withSetterVisibility(Visibility.NONE)
.withIsGetterVisibility(Visibility.NONE));
}
public ObjectMapper mapper() {
return mapper;
}
}
Diese entpuppen wird exakt die gleichen json Strings als Gson für die gleichen Objekte zu geben. Sie können festlegen, dass nur Getter und Setter verwendet werden, wenn Sie möchten. Ich würde Ihnen raten, alle jackson json Annotationen für die Handhabung von Subtypen zu lesen (nützlich für RPC-ähnliche Systeme).
Meine Anwendungsfälle: Ich benutze Jackson als Serialisierung, wenn ich Blobs zu Speichersystemen speichern muss (Redis, Cassandra, Mongo, ... irgendwann auch mysql). Ich benutze es auch als Serialisierung für meine RPC-style APIs für ziemlich hohe Verkehrssysteme, obwohl ich Protobuf für diejenigen vorziehen, wenn möglich. In diesem letzten Fall benutze ich Jackson, um direkt in Byte [] oder Stream für eine bessere Leistung zu serialisieren.
Eine letzte Anmerkung: Der Objekt-Mapper ist Thread-sicher und mit einer statischen Instanz wie in dem Beispiel, das ich gerade eingereicht habe, wird verhindert, dass Sie den geringen Instanziierungsaufwand haben.
EDIT: Ich bin mir bewusst, dass mein Beispiel nicht viele der Best Practices auf der Jackson-Seite folgt, aber es ermöglicht mir, einfach Code zu verstehen, der wie die und Gson.fromJson
aussieht (mit denen ich begann) zu und schaltete später Jackson)
Gson.toJson(object)
=>JsonMapper.INSTANCE.mapper().writeValueAsString(object)
Gson.fromJson(object, clazz)
=>JsonMapper.INSTANCE.mapper().readValue(jsonString, clazz);
fastJson ist eine C# -Bibliothek ... – melbic