Ich schreibe ein kleines Serialisierungs-Dienstprogramm, und ich möchte berechnen, wie viele Bytes ich reservieren muss, um ein Objekt in ein Byte-Array zu schreiben. Sagen wir, ich habe eine Klasse mit ein paar Felder/Getter wieGibt es einen direkten Weg, die Größe primitiver Felder zu berechnen?
int age;
String name;
Colour colour;
boolean active;
...
Ich dachte, ich Reflexion über Felder zu durchlaufen benutzen konnten und sehen, welche Größe sie haben, aber alles, was ich tun kann, ist zu überprüfen, ob sie primitiv sind. Was ist ein Anfang, da ich einen Short als Offset für Objekte verwenden würde. Okay, könnte ich
if(field.getType() == int.class) {
size = Integer.BYTES;
}
oder eine Karte verwenden. Es wäre nicht so schwer, da ich nur die Größe von Primitiven kennen müsste. Aber aus Neugier: Gibt es einen direkten Weg?
bearbeiten um zu klären: Ich benutze es um Daten zu serialisieren, im Grunde wie DataOutput/InputStream, aber mit einigen Verbesserungen, die ich für mich selbst wollte.
Die API-Klasse sieht wie folgt aus:
public final void write(int i) {
checkBounds(Integer.BYTES);
PrimitiveWriteUtil.write(i, data, marker);
advance(Integer.BYTES);
}
Die eigentliche Arbeit durch eine Utility-Klasse getan wird:
public static void write(int i, byte[] target, int pos) {
target[pos] = (byte) ((i >>> 24) & 0xFF);
target[pos + 1] = (byte) ((i >>> 16) & 0xFF);
target[pos + 2] = (byte) ((i >>> 8) & 0xFF);
target[pos + 3] = (byte) ((i >>> 0) & 0xFF);
}
Also, ich die erforderliche Größe meines Byte-Array wissen wollen, so Ich kann den Aufwand der Überprüfung und Größenanpassung später vermeiden.
möglich duplizieren von: http://StackOverflow.com/Questions/52353/in-java-what-is-the-best-way-to-Determine-the-Size-of-an-Object –
Ich schaute durch das vorher und es passt absolut nicht zu meinem Anwendungsfall. Ich möchte nur die Größe aller primitiven Felder von _one_ Objekt zur Laufzeit erhalten. – Silverclaw
Warum? Schreiben Sie einfach in einen ByteArrayOutputStream und holen Sie sich daraus das Byte-Array. Es wird die richtige Größe sein. – EJP