package perf; import java.io.*; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; public class ManualReadPerfUntypedReader extends ObjectReaderTestBase { @Override protected int targetSizeMegs() { return 15; } public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java [input]"); System.exit(1); } byte[] data = readAll(args[0]); JsonFactory f = new JsonFactory(); boolean doIntern = true; f.configure(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES, doIntern); f.configure(JsonFactory.Feature.INTERN_FIELD_NAMES, doIntern); ObjectMapper m = new ObjectMapper(); Object input1 = m.readValue(data, Object.class); JsonNode input2 = m.readTree(data); new ManualReadPerfUntypedReader() .testFromString( m, "JSON-as-Object", input1, Object.class ,m, "JSON-as-Object2", input2, Object.class ); } // When comparing to simple streaming parsing, uncomment: @Override protected double testDeser1(int reps, String input, ObjectReader reader) throws IOException { return _testRawDeser(reps, input, reader); } @Override protected double testDeser2(int reps, String input, ObjectReader reader) throws IOException { return _testRawDeser(reps, input, reader); } protected final double _testRawDeser(int reps, String json, ObjectReader reader) throws IOException { long start = System.nanoTime(); final JsonFactory f = reader.getFactory(); while (--reps >= 0) { JsonParser p = f.createParser(json); JsonToken t; while ((t = p.nextToken()) != null) { if (t == JsonToken.VALUE_STRING) { p.getText(); } else if (t.isNumeric()) { p.getNumberValue(); } ; } p.close(); } hash = f.hashCode(); return _msecsFromNanos(System.nanoTime() - start); } }