From b9a662e4b35ba4d916920f21c22243ada74124b7 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Fri, 2 Aug 2013 14:49:16 +0000 Subject: [PATCH] Added benchmark lib --- libs/junit-benchmarks-0.7.0.jar | Bin 0 -> 72619 bytes .../parser/json/JSONObjectInputStream.java | 12 +- .../parser/json/JSONObjectOutputStream.java | 19 +-- src/zutil/test/JSONSerializerBenchmark.java | 128 ++++++++++++++++++ src/zutil/test/JSONSerializerTest.java | 54 ++++---- 5 files changed, 169 insertions(+), 44 deletions(-) create mode 100644 libs/junit-benchmarks-0.7.0.jar create mode 100644 src/zutil/test/JSONSerializerBenchmark.java diff --git a/libs/junit-benchmarks-0.7.0.jar b/libs/junit-benchmarks-0.7.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..bea0bf56dd7332917baf9e508257683e7b28fa43 GIT binary patch literal 72619 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 PU objCache; + private HashMap objectCache; public JSONObjectInputStream(Reader in) { this.parser = new JSONParser(in); - this.objCache = new HashMap(); + this.objectCache = new HashMap(); } public Object readObject() throws IOException { @@ -60,15 +60,15 @@ public class JSONObjectInputStream extends InputStream implements ObjectInput, C } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { - objCache.clear(); + objectCache.clear(); } return null; } protected Object readObject(DataNode json) throws IllegalAccessException, InstantiationException, ClassNotFoundException, IllegalArgumentException, UnsupportedDataTypeException { // See if the Object id is in the cache before continuing - if(json.getString("@object_id") != null && objCache.containsKey(json.getInt("@object_id"))) - return objCache.get(json.getInt("@object_id")); + if(json.getString("@object_id") != null && objectCache.containsKey(json.getInt("@object_id"))) + return objectCache.get(json.getInt("@object_id")); Class objClass = Class.forName(json.getString("@class")); Object obj = objClass.newInstance(); @@ -87,7 +87,7 @@ public class JSONObjectInputStream extends InputStream implements ObjectInput, C } // Add object to the cache if(json.getString("@object_id") != null) - objCache.put(json.getInt("@object_id"), obj); + objectCache.put(json.getInt("@object_id"), obj); return obj; } diff --git a/src/zutil/parser/json/JSONObjectOutputStream.java b/src/zutil/parser/json/JSONObjectOutputStream.java index 01f1169..0ea273b 100644 --- a/src/zutil/parser/json/JSONObjectOutputStream.java +++ b/src/zutil/parser/json/JSONObjectOutputStream.java @@ -89,6 +89,11 @@ public class JSONObjectOutputStream extends OutputStream implements ObjectOutput out.write(new DataNode(s)); } + @Override + public void write(int b) throws IOException { + out.write(new DataNode(b)); + } + public void writeUTF(String s) throws IOException { out.write(new DataNode(s)); } @@ -98,6 +103,8 @@ public class JSONObjectOutputStream extends OutputStream implements ObjectOutput out.write(getDataNode(obj)); } catch (IllegalAccessException e) { throw new IOException("Unable to serialize object", e); + } finally { + objectCache.clear(); } } @@ -185,11 +192,6 @@ public class JSONObjectOutputStream extends OutputStream implements ObjectOutput return node; } - @Override - public void write(int b) throws IOException { - // TODO: - } - /** * Enable or disables the use of meta data in the JSON * stream for class def and caching. @@ -200,11 +202,4 @@ public class JSONObjectOutputStream extends OutputStream implements ObjectOutput generateMetaData = generate; } - /** - * Reset the Object stream (clears the cache) - */ - public void reset(){ - objectCache.clear(); - } - } diff --git a/src/zutil/test/JSONSerializerBenchmark.java b/src/zutil/test/JSONSerializerBenchmark.java new file mode 100644 index 0000000..210b3aa --- /dev/null +++ b/src/zutil/test/JSONSerializerBenchmark.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2013 ezivkoc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package zutil.test; + +import com.carrotsearch.junitbenchmarks.BenchmarkRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.MethodRule; +import zutil.io.StringOutputStream; +import zutil.parser.json.JSONObjectInputStream; +import zutil.parser.json.JSONObjectOutputStream; +import zutil.test.JSONSerializerTest.*; + +import java.io.*; +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; + +public class JSONSerializerBenchmark { + private static final int TEST_EXECUTIONS = 2000; + + @Rule + public BenchmarkRule benchmarkRun = new BenchmarkRule(); + + @Test + public void testJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{ + for(int i=0; i T sendReceiveObject(T sourceObj) throws IOException{ + public static T sendReceiveObject(T sourceObj) throws IOException{ return readObjectFromJson( writeObjectToJson(sourceObj)); } @SuppressWarnings("unchecked") - private static T readObjectFromJson(String json) throws IOException{ + public static T readObjectFromJson(String json) throws IOException{ StringReader bin = new StringReader(json); JSONObjectInputStream in = new JSONObjectInputStream(bin); T targetObj = (T) in.readObject(); @@ -136,8 +124,8 @@ public class JSONSerializerTest{ return targetObj; } - - private static String writeObjectToJson(T sourceObj) throws IOException{ + + public static String writeObjectToJson(T sourceObj) throws IOException{ StringOutputStream bout = new StringOutputStream(); JSONObjectOutputStream out = new JSONObjectOutputStream(bout); @@ -146,7 +134,7 @@ public class JSONSerializerTest{ out.close(); String data = bout.toString(); - System.out.println(data); + //System.out.println(data); return data; } @@ -222,4 +210,18 @@ public class JSONSerializerTest{ Arrays.equals(this.array ,((TestClassArray)obj).array); } } + + public static class TestClassStringArray{ + private String[] array; + + public TestClassStringArray init(){ + array = new String[]{"test","string","array"}; + return this; + } + + public boolean equals(Object obj){ + return obj instanceof TestClassStringArray && + Arrays.equals(this.array ,((TestClassStringArray)obj).array); + } + } }