diff --git a/libs/junit-benchmarks-0.7.0.jar b/libs/junit-benchmarks-0.7.0.jar new file mode 100644 index 0000000..bea0bf5 Binary files /dev/null and b/libs/junit-benchmarks-0.7.0.jar differ diff --git a/src/zutil/parser/json/JSONObjectInputStream.java b/src/zutil/parser/json/JSONObjectInputStream.java index 499af04..a66b736 100644 --- a/src/zutil/parser/json/JSONObjectInputStream.java +++ b/src/zutil/parser/json/JSONObjectInputStream.java @@ -37,11 +37,11 @@ import javax.activation.UnsupportedDataTypeException; public class JSONObjectInputStream extends InputStream implements ObjectInput, Closeable{ private JSONParser parser; - private HashMap 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); + } + } }