Вот мой тест которым я проверял это дело на скорость. Там есть как генерация XML из объектов, так и парсинг XML в объекты.
Код | import java.io.*; import java.util.Calendar; import java.util.Random;
import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlOptions;
public class Main { public static final int TEST_RUN_COUNT = 50; public static final int RUN_COUNT = 100; public static final int ENTRY_COUNT = 1;
private static Random random = new Random();
public static void main(String[] args) throws Exception { RootDTOPlusDocument doc = generateDocument();
validateDocument(doc);
//////////////////////////////////////////////// //init save options XmlOptions xmlOptions = new XmlOptions(); xmlOptions.setCharacterEncoding("UTF-8"); xmlOptions.setSavePrettyPrint(); xmlOptions.setSavePrettyPrintIndent(2); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(1024);
saveToDevNull(doc, xmlOptions);
saveToByteArray(byteOut, doc, xmlOptions);
//////////////////////////////////////////////// //init parse options byteOut.reset(); doc.save(byteOut, xmlOptions); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
parseAndValidate(byteIn);
//harm data doc.getRootDTOPlus().getHumanArray(0).setTransactId(new byte[0]); byteOut.reset(); doc.save(byteOut, xmlOptions); byteIn = new ByteArrayInputStream(byteOut.toByteArray());
parseValidating(byteIn); }
private static void parseValidating(ByteArrayInputStream byteIn) throws XmlException, IOException { XmlOptions xmlOptions; long time; xmlOptions = new XmlOptions(); xmlOptions.setValidateOnSet();
time = System.currentTimeMillis(); byteIn.reset(); RootDTOPlusDocument.Factory.parse(byteIn, xmlOptions); time = System.currentTimeMillis() - time; System.out.println("XML first parse vaidating from ByteArrayInputStream time = " + time + " ms");
for(int i = 0; i < TEST_RUN_COUNT; i++) { byteIn.reset(); RootDTOPlusDocument.Factory.parse(byteIn, xmlOptions); }
time = System.currentTimeMillis(); for(int i = 0; i < RUN_COUNT; i++) { byteIn.reset(); RootDTOPlusDocument.Factory.parse(byteIn, xmlOptions); } time = System.currentTimeMillis() - time; System.out.println("XML parse vaidating from ByteArrayInputStream time = " + ((double) time) / RUN_COUNT + " ms"); }
private static void parseAndValidate(ByteArrayInputStream byteIn) throws XmlException, IOException { long time; RootDTOPlusDocument doc; time = System.currentTimeMillis(); byteIn.reset(); doc = RootDTOPlusDocument.Factory.parse(byteIn); doc.validate(); time = System.currentTimeMillis() - time; System.out.println("XML first parse and validate from ByteArrayInputStream time = " + time + " ms");
for(int i = 0; i < TEST_RUN_COUNT; i++) { byteIn.reset(); doc = RootDTOPlusDocument.Factory.parse(byteIn); doc.validate(); }
time = System.currentTimeMillis(); for(int i = 0; i < RUN_COUNT; i++) { byteIn.reset(); doc = RootDTOPlusDocument.Factory.parse(byteIn); doc.validate(); } time = System.currentTimeMillis() - time; System.out.println("XML parse and validate from ByteArrayInputStream time = " + ((double) time) / RUN_COUNT + " ms"); }
private static void saveToByteArray(ByteArrayOutputStream byteOut, RootDTOPlusDocument doc, XmlOptions xmlOptions) throws IOException { long time; time = System.currentTimeMillis(); byteOut.reset(); doc.save(byteOut, xmlOptions); time = System.currentTimeMillis() - time; System.out.println("XML first write to ByteArrayOutputStream time = " + time + " ms");
for(int i = 0; i < TEST_RUN_COUNT; i++) { byteOut.reset(); doc.save(byteOut, xmlOptions); }
time = System.currentTimeMillis(); for(int i = 0; i < RUN_COUNT; i++) { byteOut.reset(); doc.save(byteOut, xmlOptions); } time = System.currentTimeMillis() - time; System.out.println("XML write to ByteArrayOutputStream time = " + ((double) time) / RUN_COUNT + " ms"); }
private static void saveToDevNull(RootDTOPlusDocument doc, XmlOptions xmlOptions) throws IOException { DevNull devNull = new DevNull(); long time; time = System.currentTimeMillis(); doc.save(devNull, xmlOptions); time = System.currentTimeMillis() - time; System.out.println("XML first write to /dev/null time = " + time + " ms");
for(int i = 0; i < TEST_RUN_COUNT; i++) doc.save(devNull, xmlOptions);
time = System.currentTimeMillis(); for(int i = 0; i < RUN_COUNT; i++) doc.save(devNull, xmlOptions); time = System.currentTimeMillis() - time; System.out.println("XML write to /dev/null time = " + ((double) time) / RUN_COUNT + " ms"); }
private static void validateDocument(RootDTOPlusDocument doc) { long time = System.currentTimeMillis(); doc.validate(); time = System.currentTimeMillis() - time; System.out.println("Validate first time = " + time + " ms");
for(int i = 0; i < TEST_RUN_COUNT; i++) doc.validate();
time = System.currentTimeMillis(); for(int i = 0; i < RUN_COUNT; i++) doc.validate(); time = System.currentTimeMillis() - time; System.out.println("Validate time = " + ((double) time) / RUN_COUNT + " ms"); }
private static RootDTOPlusDocument generateDocument() { RootDTOPlusDocument doc = RootDTOPlusDocument.Factory.newInstance(); RootDTOPlusDocument.RootDTOPlus root = doc.addNewRootDTOPlus(); for(int i = 0; i < ENTRY_COUNT; i++) generateHuman(root); return doc; }
private static void generateHuman(RootDTOPlusDocument.RootDTOPlus root) { HumanType human = root.addNewHuman(); human.setTransactId(getGUID()); human.setDml(DmlType.INSERT); human.addNewAdressing().setGuid(getGUID()); HumanFieldsType humanFields = human.addNewFields(); humanFields.setFirstName("Акакий"); humanFields.setMiddleName("Назарыч"); humanFields.setLastName("Зербенштейн"); humanFields.setSex((short) 0); humanFields.setDateReg(Calendar.getInstance()); humanFields.setComment("Аффтар ЖЖОТ! Каменты рулят! Пеши исчо!"); LinkType link = human.addNewLinks(); link.setDtoName("HUMAN"); link.setRole("parent"); link.setGuid(getGUID()); }
private static byte[] getGUID() { byte[] guid = new byte[16]; random.nextBytes(guid); return guid; }
private static class DevNull extends OutputStream { public DevNull() { }
public void write(byte b[]) { }
public void write(byte b[], int off, int len) { }
public void flush() { }
public void close() { }
public void write(int b) { } } } |
|