All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.java.test.TestStreamSpeed Maven / Gradle / Ivy

package test;

import java.io.*;
import java.util.List;
import java.util.zip.GZIPInputStream;

import javax.xml.stream.*;

import org.codehaus.stax2.LocationInfo;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;

import com.ctc.wstx.api.WstxInputProperties;

/**
 * Simple stream speed stress test, useful for profiling, as well as for
 * quickly checking high-level performance effects of changes (albeit
 * not very accurately, obviously -- need longer running composite
 * tests for such verifications)
 *

* Note that this can be used to test both Reader and InputStream-based * stream readers. */ public class TestStreamSpeed implements XMLStreamConstants { final int COUNT = 150; final XMLInputFactory mInputFactory; private TestStreamSpeed() { System.setProperty("javax.xml.stream.XMLInputFactory", "com.ctc.wstx.stax.WstxInputFactory"); XMLInputFactory f = XMLInputFactory.newInstance(); System.out.println("Factory instance: "+f.getClass()); f.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE); //f.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); f.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE); //f.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE); f.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, //Boolean.FALSE Boolean.TRUE ); f.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.TRUE); f.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.FALSE); f.setProperty(XMLInputFactory.REPORTER, new TestReporter()); f.setProperty(XMLInputFactory.RESOLVER, new TestResolver1()); if (f.isPropertySupported(XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE)) { f.setProperty(XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE, Boolean.FALSE //Boolean.TRUE ); } /* if (f.isPropertySupported(WstxInputProperties.P_MIN_TEXT_SEGMENT)) { f.setProperty(WstxInputProperties.P_MIN_TEXT_SEGMENT, new Integer(23)); } */ /* if (f.isPropertySupported(WstxInputProperties.P_BASE_URL)) { f.setProperty(WstxInputProperties.P_BASE_URL, file.toURL()); } */ /* System.out.print("Coalesce: "+f.getProperty(XMLInputFactory.IS_COALESCING)); System.out.println(", NS-aware: "+f.getProperty(XMLInputFactory.IS_NAMESPACE_AWARE)); System.out.print("Entity-expanding: "+f.getProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES)); System.out.println(", validating: "+f.getProperty(XMLInputFactory.IS_VALIDATING)); */ mInputFactory = f; } protected int test(File file) throws Exception { byte[] bdata = readBData(file); char[] cdata = readCData(file); System.out.println(" -> "+bdata.length+" bytes/chars read."); // Let's only pass one as non-null: //return test2(file, bdata, null); return test2(file, null, cdata); } protected int test2(File file, byte[] bdata, char[] cdata) throws Exception { int total = 0; long orig = System.currentTimeMillis(); int count = 5; if (bdata != null) { System.out.println(" -> "+bdata.length+" bytes in buffer..."); } else if (cdata != null) { System.out.println(" -> "+cdata.length+" chars in buffer..."); } else{ throw new Error("BData and CData both null!"); } System.out.print("First, warming up: "); while (--count >= 0) { total += test3(bdata, cdata, file); System.out.print("."); } System.out.println(); System.out.println("Ok, great. Then the actual test:"); count = COUNT; while (--count >= 0) { long now = System.currentTimeMillis(); total += (test3(bdata, cdata, file) & 0xFF); System.out.println("Took: "+(System.currentTimeMillis() - now)+" msecs."); // Let's allow some time for other tasks too: try { System.gc(); Thread.sleep(50L); // 50 msecs... is it enough? } catch (InterruptedException ioe) { } } System.out.println(); // Need to subtract sleeps: long ttime = (System.currentTimeMillis()-orig); ttime -= (COUNT * 50); System.out.println("Total time: "+ttime+" msecs."); return count; } protected int test3(byte[] bdata, char[] cdata, File file) throws Exception { XMLInputFactory2 f = (XMLInputFactory2) mInputFactory; XMLStreamReader2 sr; /* if (bdata != null) { sr = (XMLStreamReader2) f.createXMLStreamReader (new ByteArrayInputStream(bdata) //,"ISO-8859-1" //,"UTF-8" ); } else { sr = (XMLStreamReader2) f.createXMLStreamReader(new CharArrayReader(cdata)); } */ sr = (XMLStreamReader2) f.createXMLStreamReader(file); int result = 0; while (sr.hasNext()) { int type = sr.next(); if (type == CHARACTERS) { // let's prevent skipping result += sr.getTextLength(); } result += type; // so it won't be optimized out... } return result; } public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java ... "+TestStreamSpeed.class+" [file]"); System.exit(1); } try { int total = new TestStreamSpeed().test(new File(args[0])); System.out.println("Total: "+total); } catch (Throwable t) { System.err.println("Error: "+t); t.printStackTrace(); } } public static byte[] readBData(File file) throws IOException { // Let's deal with gzipped files too? InputStream fin = new FileInputStream(file); if (file.getName().endsWith(".gz")) { System.out.println("[gzipped input file!]"); fin = new GZIPInputStream(fin); } try { byte[] buf = new byte[16000]; ByteArrayOutputStream bos = new ByteArrayOutputStream(4000); int count; while ((count = fin.read(buf)) > 0) { bos.write(buf, 0, count); } return bos.toByteArray(); } finally { fin.close(); } } public static char[] readCData(File f) throws IOException { FileReader fr = new FileReader(f); try { char[] buf = new char[16000]; CharArrayWriter cw = new CharArrayWriter(4000); int count; while ((count = fr.read(buf)) > 0) { cw.write(buf, 0, count); } return cw.toCharArray(); } finally { fr.close(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy