- 浏览: 20532 次
- 性别:
- 来自: 重庆
最新评论
-
agapple:
以前用的获取泛型的一个方法,可恶意处理多级泛型和泛型数组。
...
Java获得泛型类型 -
Relucent:
如果是方法 可以用 getGenericParameterTy ...
Java获得泛型类型 -
zcy860511:
iamlotus 写道<div class=&q ...
Java获得泛型类型 -
zcy860511:
yidao620c 写道递归再递归咋没说、、、、
只是一个递归 ...
在递归再递归之后,终于解决了泛型嵌套问题。。。 -
yidao620c:
递归再递归咋没说、、、、
在递归再递归之后,终于解决了泛型嵌套问题。。。
自己写了一个Json的编码器和解码器
下面的地址是对比用的json-lib项目
http://json-lib.sourceforge.net/
下面是部分测试比较
下面是测试结果
首先,预热是相同的,应该不存在误差
因为我使用了许多对象,所以在大量创建对象的情况下,我的效率将被降低,因为JVM的垃圾回收机制
但是在一万次一下的比较中,我的编码程序占据优势,我相信很少情况有大于一千个对象被编码为Json字符串
比较客观的比较应该在100次比较的位置,我也尝试过编写简单的Bean进行测试,我的编码器同样占据速度上的优势,OK,我们看解码
我的结果是生成Map,然后通过接口传递到Handler中进行下一步处理,这样可以将算法与处理进行分离
这是10次的结果
这是100次的结果
这是1000次的结果
这是10000次的结果
10万次,我不愿意比较了。。。。。。这个已经能够说明问题了。。
当然,不要指望net.sf.json.JSONObject工具会帮助你解码的很完善,fromObject出来的一样是map甚至是他自己创建的结构,并且不支持单一对象的编解码。
例如简单的字符串,比如我不发送对象,只是一个字符串,那么它就做不到,只会给你抛出一个异常。
不知道有人用这个工具包没有,至少我发现这个工具包很差,所以不得已自己写工具包
其次。。。也就是他的toBean方法,在处理泛型的时候不可能转换为确定的类型。
例如:TestBean里有一个List,装载的是SubBean,那么它不会很智能的给你转换为SubBean而是转换为了他自己的Bean,当你使用这个TestBean里的List的时候就等着java.lang.ClassCastException吧Orz.....
下面我把源码包发上来
----------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
v1是最新版本
看来编程是白学了。。。居然有个BUG,大家如果愿意用的话帮我找找,看还有BUG没有,我已经审查了算法很多遍了。。。
下面是一个例子,怎么用的例子
如果有大大愿意给小弟讲下架构就太好了。。。因为我最后发现最开始版本的Handler没用,我也考虑使用Builder模式在算法过程中使用Builder进行对象数组创建,但是都失败了,因为这个问题是个递归问题,递归在栈上不好做文章,确实要考虑就真的只有换非递归算法才能更好的使用设计模式里的算法分离了。。。。哎
至于效率,我也没测试了,看了jackson的实现后,我深深的自卑了
有更好的提议么?似乎动态性只能用反射吧?
我的慢应该是递归的问题。。。
算法木学好
用动态规划 试试
判断一个Class是否属于一个Collection的或子接口,用instanceof不就行了?
例如:
还有一种方式,
有更好的提议么?似乎动态性只能用反射吧?
我的慢应该是递归的问题。。。
算法木学好
gson 是最慢的。下面是它跟其他几种序列化的效率比较:
其中上表中各个版本如下:
hprose 是 1.0 版本
hessian 是 4.0.1 版本
php 是 phprpc 3.0 版本
java 是 6.0 内置序列化
json/google-gson 是 gson 1.4 版本。
gson 慢的不是一个数量级的问题。
没有测试过。。。你可以自己下载代码测测
其实我也在设计这一块是个菜鸟,很多时候都会犯00原则错误,但是在编码过程中也渐渐体会到了应该怎么写,只是复用性上还比较差所以也在继续学习,写框架的目的就是为了更好的学习架构,学习如何写好代码。
例如:看到别人用DAO我就用DAO,这样的方式不好
第一是不知道为什么用DAO,用DAO有什么好处,毕竟还在学习阶段不是高效出产品的时候。
第二是老学别人的,我们自己的思考方式就被僵化了,所以我也很少考虑怎么套用设计模式而是自己设计接口自己设计类间关系,这样才可以提升自己
呵呵,鄙人有个不大不小的梦想就是某天当一个架构师,至于能不能实现就不奢望了,个人觉得不后悔就好
下面的地址是对比用的json-lib项目
http://json-lib.sourceforge.net/
下面是部分测试比较
/* * Copyright 2010 Sandy Zhang * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ /** * */ package org.javazone.jroi.framework.coder; import net.sf.json.JSONObject; import org.javazone.jroi.framework.coder.json.JsonValue; import org.javazone.jroi.framework.coder.json.encode.DefaultJsonEncoder; /** * @author Sandy Zhang */ public class JsonTest { public static void main(String[] args) { TestBean tb = null; DefaultJsonEncoder encoder = new DefaultJsonEncoder(); for (int i = 0; i < 100; i++) { tb = new TestBean(); JSONObject.fromObject(tb); encoder.encodeBean(tb).toJsonString(); } int count = 10000; tb = tb.init(); // 以上代码为预热代码 double a = System.currentTimeMillis(); for (int i = 0; i < count; i++) { JSONObject.fromObject(tb); } double c1 = System.currentTimeMillis() - a; // 以上为JSON_LIB编码。。。先不论其编码架构怎么样 a = System.currentTimeMillis(); for (int i = 0; i < count; i++) { new DefaultJsonEncoder().encodeBean(tb).toJsonString(); } double c2 = System.currentTimeMillis() - a; // 以上为我自己写的Json_encoder System.out.println("test count = " + count); System.out.println("JSON ENCODER use time : " + c1 + " ms"); System.out.println("JROI_JSON ENCODER use time : " + c2 + " ms"); System.out.println("(JROI_JSON is faster than JSON_LIB)rate : " + ((c1 / c2) - 1) * 100 + "%"); System.out.println(); // 下面是一次调用的微毫秒级别的比较 a = System.nanoTime(); JSONObject o1 = JSONObject.fromObject(tb); double c = System.nanoTime() - a; System.out.println("JSON_LIB run once use time " + c + " ns"); a = System.nanoTime(); JsonValue o2 = new DefaultJsonEncoder().encodeBean(tb); c = System.nanoTime() - a; System.out.println("JROI_JSON run once use time " + c + " ns"); } }
下面是测试结果
test count = 10 JSON ENCODER use time : 46.0 ms JROI_JSON ENCODER use time : 16.0 ms (JROI_JSON is faster than JSON_LIB)rate : 187.5% JSON_LIB run once use time 2517448.0 ns JROI_JSON run once use time 977297.0 ns
test count = 100 JSON ENCODER use time : 199.0 ms JROI_JSON ENCODER use time : 93.0 ms (JROI_JSON is faster than JSON_LIB)rate : 113.9784946236559% JSON_LIB run once use time 731587.0 ns JROI_JSON run once use time 517284.0 ns
test count = 1000 JSON ENCODER use time : 664.0 ms JROI_JSON ENCODER use time : 663.0 ms (JROI_JSON is faster than JSON_LIB)rate : 0.15082956259426794% JSON_LIB run once use time 392889.0 ns JROI_JSON run once use time 405821.0 ns
test count = 10000 JSON ENCODER use time : 4335.0 ms JROI_JSON ENCODER use time : 6089.0 ms (JROI_JSON is faster than JSON_LIB)rate : -28.806043685334203% JSON_LIB run once use time 452007.0 ns JROI_JSON run once use time 406438.0 ns
test count = 100000 JSON ENCODER use time : 42517.0 ms JROI_JSON ENCODER use time : 71011.0 ms (JROI_JSON is faster than JSON_LIB)rate : -40.126177634451% JSON_LIB run once use time 389195.0 ns JROI_JSON run once use time 516668.0 ns
首先,预热是相同的,应该不存在误差
因为我使用了许多对象,所以在大量创建对象的情况下,我的效率将被降低,因为JVM的垃圾回收机制
但是在一万次一下的比较中,我的编码程序占据优势,我相信很少情况有大于一千个对象被编码为Json字符串
比较客观的比较应该在100次比较的位置,我也尝试过编写简单的Bean进行测试,我的编码器同样占据速度上的优势,OK,我们看解码
我的结果是生成Map,然后通过接口传递到Handler中进行下一步处理,这样可以将算法与处理进行分离
/* * Copyright 2010 Sandy Zhang * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ /** * */ package org.javazone.jroi.framework.coder; import java.util.Map; import net.sf.json.JSONObject; import org.javazone.jroi.framework.coder.json.JsonObject; import org.javazone.jroi.framework.coder.json.decode.analyze.AnalyzeEvent; import org.javazone.jroi.framework.coder.json.decode.analyze.AnalyzeHandler; import org.javazone.jroi.framework.coder.json.decode.analyze.JsonAnalyzer; /** * @author Sandy Zhang */ public class DecodeTest { public static class TestAnalyzeHandler implements AnalyzeHandler { @Override public void endAnalyze(AnalyzeEvent e) { // Map<String, Object> map = (Map<String, Object>) e.getResult(); // System.out.println(map.get("name")); // Object[] objs = (Object[]) map.get("subBeans"); // System.out.println(objs.length); // for (Object object : objs) // { // System.out.println(object); // } } @Override public void startAnalyze(AnalyzeEvent e) { // System.out.println("start"); } } public static void main(String[] args) { for (int i = 0; i < 5; i++) { JsonAnalyzer analyzer = new JsonAnalyzer(); analyzer.addAnalyzeHandler(new TestAnalyzeHandler()); JsonEncoder encoder = Coder.newJsonEncoder(); JsonObject jsonObj = (JsonObject) encoder.encodeBean(new TestBean().init()); String jsonStr = jsonObj.toJsonString(); JSONObject.fromObject(jsonStr); // System.out.println(jsonStr); analyzer.analyze(jsonStr); } // 预热代码 int count = 10; JsonEncoder encoder = Coder.newJsonEncoder(); JsonObject jsonObj = (JsonObject) encoder.encodeBean(new TestBean().init()); String jsonStr = jsonObj.toJsonString(); // 产生 long a = System.currentTimeMillis(); for (int i = 0; i < count; i++) { JsonAnalyzer analyzer = new JsonAnalyzer(); analyzer.addAnalyzeHandler(new TestAnalyzeHandler()); analyzer.analyze(jsonStr); } long b = System.currentTimeMillis(); System.out.println(b - a); // 以上为我自己写的解码器 a = System.currentTimeMillis(); for (int i = 0; i < count; i++) { JSONObject.fromObject(jsonStr); } b = System.currentTimeMillis(); System.out.println(b - a); // 以上为Json lib 解码方法 } }
这是10次的结果
21 102
这是100次的结果
139 467
这是1000次的结果
484 3450
这是10000次的结果
4217 39873
10万次,我不愿意比较了。。。。。。这个已经能够说明问题了。。
当然,不要指望net.sf.json.JSONObject工具会帮助你解码的很完善,fromObject出来的一样是map甚至是他自己创建的结构,并且不支持单一对象的编解码。
例如简单的字符串,比如我不发送对象,只是一个字符串,那么它就做不到,只会给你抛出一个异常。
不知道有人用这个工具包没有,至少我发现这个工具包很差,所以不得已自己写工具包
其次。。。也就是他的toBean方法,在处理泛型的时候不可能转换为确定的类型。
例如:TestBean里有一个List,装载的是SubBean,那么它不会很智能的给你转换为SubBean而是转换为了他自己的Bean,当你使用这个TestBean里的List的时候就等着java.lang.ClassCastException吧Orz.....
下面我把源码包发上来
----------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
v1是最新版本
看来编程是白学了。。。居然有个BUG,大家如果愿意用的话帮我找找,看还有BUG没有,我已经审查了算法很多遍了。。。
下面是一个例子,怎么用的例子
package org.javazone.jroi.framework.coder; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; public class TestBean { private Collection<TestSubBean> beans = new ArrayList<TestSubBean>(); public Collection<TestSubBean> getBeans() { return beans; } public void setBeans(Collection<TestSubBean> beans) { this.beans = beans; } public Set<TestSubBean> getTestSet() { return testSet; } public void setTestSet(Set<TestSubBean> testSet) { this.testSet = testSet; } public TestSubBean getTestSubBean() { return testSubBean; } public void setTestSubBean(TestSubBean testSubBean) { this.testSubBean = testSubBean; } public List<TestSubBean> getList() { return list; } public void setList(List<TestSubBean> list) { this.list = list; } private Set<TestSubBean> testSet = new HashSet<TestSubBean>(); private TestSubBean testSubBean = new TestSubBean(); private List<TestSubBean> list = new ArrayList<TestSubBean>(); public TestBean init() { beans.add(new TestSubBean()); testSet.add(new TestSubBean()); list.add(new TestSubBean()); return this; } }
/* * Copyright 2010 Sandy Zhang * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ /** * */ package org.javazone.jroi.framework.coder; public class TestSubBean { private static int currentid = 0; private String testString = "this is my sub bean : id = " + Integer.toString(++currentid); private String testNull = null; private Integer intTest = Integer.MAX_VALUE; private Long longTest = Long.MAX_VALUE; private Double doubleObjectTest = Double.MAX_VALUE; private Float floatObjectTest = Float.MAX_VALUE; public void setTestNull(String testNull) { this.testNull = testNull; } public String getTestNull() { return testNull; } public void setIntTest(Integer intTest) { this.intTest = intTest; } public Integer getIntTest() { return intTest; } public void setLongTest(Long longTest) { this.longTest = longTest; } public Long getLongTest() { return longTest; } public void setDoubleObjectTest(Double doubleObjectTest) { this.doubleObjectTest = doubleObjectTest; } public Double getDoubleObjectTest() { return doubleObjectTest; } public void setFloatObjectTest(Float floatObjectTest) { this.floatObjectTest = floatObjectTest; } public Float getFloatObjectTest() { return floatObjectTest; } public void setTestString(String testString) { this.testString = testString; } public String getTestString() { return testString; } }
/* * Copyright 2010 Sandy Zhang * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ /** * */ package org.javazone.jroi.framework.coder; import java.util.Arrays; /** * @author Sandy Zhang */ public class JsonTest { public static void main(String[] args) { JsonEncoder encoder = Coder.newJsonEncoder(); String jsonString = encoder.encodeBean(new TestBean().init()).toJsonString(); System.out.println(jsonString); JsonDecoder decoder = Coder.newJsonDecoder(); TestBean bean = (TestBean) decoder.decodeBean(jsonString, TestBean.class); System.out.println(bean.getTestSubBean().getTestNull()); System.out.println(bean.getTestSubBean().getTestString()); System.out.println(bean.getTestSubBean().getDoubleObjectTest()); System.out.println(bean.getTestSubBean().getFloatObjectTest()); System.out.println(bean.getTestSubBean().getIntTest()); System.out.println(bean.getTestSubBean().getLongTest()); System.out.println(Arrays.toString(bean.getList().toArray())); System.out.println(Arrays.toString(bean.getTestSet().toArray())); System.out.println(Arrays.toString(bean.getList().toArray())); } }
{"beans":[{"longTest":9223372036854775807,"floatObjectTest":3.4028235E38,"intTest":2147483647,"testString":"this is my sub bean : id = 2","doubleObjectTest":1.7976931348623157E308,"testNull":null}],"testSubBean":{"longTest":9223372036854775807,"floatObjectTest":3.4028235E38,"intTest":2147483647,"testString":"this is my sub bean : id = 1","doubleObjectTest":1.7976931348623157E308,"testNull":null},"list":[{"longTest":9223372036854775807,"floatObjectTest":3.4028235E38,"intTest":2147483647,"testString":"this is my sub bean : id = 4","doubleObjectTest":1.7976931348623157E308,"testNull":null}],"testSet":[{"longTest":9223372036854775807,"floatObjectTest":3.4028235E38,"intTest":2147483647,"testString":"this is my sub bean : id = 3","doubleObjectTest":1.7976931348623157E308,"testNull":null}]} null this is my sub bean : id = 1 1.7976931348623157E308 3.4028235E38 2147483647 9223372036854775807 [org.javazone.jroi.framework.coder.TestSubBean@52fe85] [org.javazone.jroi.framework.coder.TestSubBean@1e0cf70] [org.javazone.jroi.framework.coder.TestSubBean@52fe85]
如果有大大愿意给小弟讲下架构就太好了。。。因为我最后发现最开始版本的Handler没用,我也考虑使用Builder模式在算法过程中使用Builder进行对象数组创建,但是都失败了,因为这个问题是个递归问题,递归在栈上不好做文章,确实要考虑就真的只有换非递归算法才能更好的使用设计模式里的算法分离了。。。。哎
至于效率,我也没测试了,看了jackson的实现后,我深深的自卑了
- jroi.framework.json.rar (31.2 KB)
- 下载次数: 73
- org.javazone.json.v1.rar (61 KB)
- 下载次数: 33
评论
21 楼
lbfhappy
2010-02-08
其实没有必要自己发明一个轮子啊,原来的功能不是挺好用的吗
20 楼
liu0013
2010-02-07
最近做一个东西也用到了json,最后选择了jackson json性能确实比较好,但还没来得及看源码,请详细说下其性能好的原因么?
19 楼
gstarwd
2010-02-06
zcy860511 写道
yefeng 写道
楼主,你的JSON,还是基于JAVA的反射写的吗,我觉得JSON快慢的瓶颈应该在反射这快,JAVA的反射很慢的
有更好的提议么?似乎动态性只能用反射吧?
我的慢应该是递归的问题。。。
算法木学好
用动态规划 试试
18 楼
johnson.lee
2010-02-06
zcy860511 写道
修改了两个BUG。。。。
看来我2年多白学了。。。。。。
上面的文件是最新的
效率,我也不敢保证了,至少没发现一个很好的方法去判断一个的Class类是否属于一个Collection的子类或子接口,所以使用了递归的方式。。。确实效率没保证啊。。。哎
至于那个反射的速度问题。。。我也不好说什么。。反射本来就慢,这点毫无疑问
看来我2年多白学了。。。。。。
上面的文件是最新的
效率,我也不敢保证了,至少没发现一个很好的方法去判断一个的Class类是否属于一个Collection的子类或子接口,所以使用了递归的方式。。。确实效率没保证啊。。。哎
至于那个反射的速度问题。。。我也不好说什么。。反射本来就慢,这点毫无疑问
判断一个Class是否属于一个Collection的或子接口,用instanceof不就行了?
例如:
List list = new ArrayList(); if (list instanceof Collection) { //todo something }
还有一种方式,
List list = new ArrayList(); if (Collection.class.isAssignableFrom(list.getClass()) { //todo something }
17 楼
hjg1988
2010-02-06
关于json-lib和jackson的比较,我这里有个简单的测试,楼主也可以看一下。。。
http://www.iteye.com/topic/561368
jackson效率确实很高,而且很好用,不像json-lib反序列化的还是自己的结构。
可以去研究研究jackson的源码
http://www.iteye.com/topic/561368
jackson效率确实很高,而且很好用,不像json-lib反序列化的还是自己的结构。
可以去研究研究jackson的源码
16 楼
zozoh
2010-02-05
15 楼
zcy860511
2010-02-05
yefeng 写道
楼主,你的JSON,还是基于JAVA的反射写的吗,我觉得JSON快慢的瓶颈应该在反射这快,JAVA的反射很慢的
有更好的提议么?似乎动态性只能用反射吧?
我的慢应该是递归的问题。。。
算法木学好
14 楼
zcy860511
2010-02-05
修改了两个BUG。。。。
看来我2年多白学了。。。。。。
上面的文件是最新的
效率,我也不敢保证了,至少没发现一个很好的方法去判断一个的Class类是否属于一个Collection的子类或子接口,所以使用了递归的方式。。。确实效率没保证啊。。。哎
至于那个反射的速度问题。。。我也不好说什么。。反射本来就慢,这点毫无疑问
看来我2年多白学了。。。。。。
上面的文件是最新的
效率,我也不敢保证了,至少没发现一个很好的方法去判断一个的Class类是否属于一个Collection的子类或子接口,所以使用了递归的方式。。。确实效率没保证啊。。。哎
至于那个反射的速度问题。。。我也不好说什么。。反射本来就慢,这点毫无疑问
13 楼
RednaxelaFX
2010-02-04
纯粹出于好奇:请问楼主能否把顶楼里第一个测时的代码的顺序换一下,就是说先跑DefaultJsonEncoder再跑JSONObject,也拿来比较一下?想看看这样在楼主的环境里得到的输出如何。
另外还想看看楼主的测试环境中使用-server之后的性能比较。最近我写了个东西,觉得对性能不满意,然后做了一点“改进”,结果在client模式上性能显著提升,但在server模式上性能却显著下降,让我郁闷得不行。到现在都还没分析清楚到底是怎么回事……
另外还想看看楼主的测试环境中使用-server之后的性能比较。最近我写了个东西,觉得对性能不满意,然后做了一点“改进”,结果在client模式上性能显著提升,但在server模式上性能却显著下降,让我郁闷得不行。到现在都还没分析清楚到底是怎么回事……
12 楼
andot
2010-02-04
kjj 写道
我一直用gson1.4楼主测了吗
gson 是最慢的。下面是它跟其他几种序列化的效率比较:
Object create | Serialize | Same Object | Deserialize | Total Time | Serialized Size | |
hprose | 201.41821 | 7205.74650 | 6612.54050 | 11117.96050 | 18323.70700 | 533 |
hessian | 202.71568 | 8752.81950 | 7708.42500 | 14302.63700 | 23055.45650 | 526 |
php | 200.86843 | 34505.29950 | 33871.77200 | 19037.86800 | 53543.16750 | 755 |
java | 200.71633 | 12600.34350 | 11281.97850 | 55721.38500 | 68321.72850 | 919 |
json/google-gson | 203.92885 | 279103.18900 | 279887.89850 | 327122.74450 | 606225.93350 | 470 |
其中上表中各个版本如下:
hprose 是 1.0 版本
hessian 是 4.0.1 版本
php 是 phprpc 3.0 版本
java 是 6.0 内置序列化
json/google-gson 是 gson 1.4 版本。
gson 慢的不是一个数量级的问题。
11 楼
yefeng
2010-02-04
楼主,你的JSON,还是基于JAVA的反射写的吗,我觉得JSON快慢的瓶颈应该在反射这快,JAVA的反射很慢的
10 楼
wendal
2010-02-04
其实是有办法获取泛型信息的.
9 楼
zcy860511
2010-02-04
kjj 写道
我一直用gson1.4楼主测了吗
没有测试过。。。你可以自己下载代码测测
8 楼
kjj
2010-02-04
我一直用gson1.4楼主测了吗
7 楼
zcy860511
2010-02-04
johnson.lee 写道
我自己也写了一个JSON LIB
源码:http://johnson-lee.iteye.com/blog/586686
看了楼主的Code,觉得用Handler这个接口,体现了设计模式的思想,不过个人觉得在使用的时候没有把这种思想发挥到极至。不知道楼主写JSON LIB的思想源于哪里?想和楼主探讨一下。
先说我一下我的思想,我是根据编译原理的思想来实现我的JSON LIB,分为Lexer和Parser,Parser驱动Lexer进行词法分析,然后对Lexer读取到的Token根据上下文进行语法检查。
还有一个C#实现
http://johnson-lee.iteye.com/blog/586715
基本上和Java实现差不多,只不过加了C#的索引器和属性,使得用起来更像JSON
源码:http://johnson-lee.iteye.com/blog/586686
看了楼主的Code,觉得用Handler这个接口,体现了设计模式的思想,不过个人觉得在使用的时候没有把这种思想发挥到极至。不知道楼主写JSON LIB的思想源于哪里?想和楼主探讨一下。
先说我一下我的思想,我是根据编译原理的思想来实现我的JSON LIB,分为Lexer和Parser,Parser驱动Lexer进行词法分析,然后对Lexer读取到的Token根据上下文进行语法检查。
还有一个C#实现
http://johnson-lee.iteye.com/blog/586715
基本上和Java实现差不多,只不过加了C#的索引器和属性,使得用起来更像JSON
其实我也在设计这一块是个菜鸟,很多时候都会犯00原则错误,但是在编码过程中也渐渐体会到了应该怎么写,只是复用性上还比较差所以也在继续学习,写框架的目的就是为了更好的学习架构,学习如何写好代码。
例如:看到别人用DAO我就用DAO,这样的方式不好
第一是不知道为什么用DAO,用DAO有什么好处,毕竟还在学习阶段不是高效出产品的时候。
第二是老学别人的,我们自己的思考方式就被僵化了,所以我也很少考虑怎么套用设计模式而是自己设计接口自己设计类间关系,这样才可以提升自己
呵呵,鄙人有个不大不小的梦想就是某天当一个架构师,至于能不能实现就不奢望了,个人觉得不后悔就好
6 楼
zcy860511
2010-02-04
大概看了一下jackson,他的效率高主要高在树状生成,而没有使用对象的方式生成字符串,读取的过程也没有analyze这个过程,而是直接生成了目标对象,没有了编译原理上的二次处理,所以他快,最初我也考虑过这种写法,但是我本来就不是搞算法的,想学习学习架构,所以就这样设计了这个解析器
5 楼
zcy860511
2010-02-04
jackson
jackson,这个序列化已经进行了比较,他的效率的确很高,我去研究研究
gof95 写道
和jackson相比呢?这个是目前最快的
jackson,这个序列化已经进行了比较,他的效率的确很高,我去研究研究
4 楼
zcy860511
2010-02-04
jackson
想要写这个是因为发现dwr的一些不足之后要自己动手做一个JROI(javascript remote object invoker),但是在写JROI的过程中序列化的时候出现了问题
至于编译原理的思想我考虑过,还是复用性,毕竟编译也会有变化,所以才这样设计
johnson.lee 写道
我自己也写了一个JSON LIB
源码:http://johnson-lee.iteye.com/blog/586686
看了楼主的Code,觉得用Handler这个接口,体现了设计模式的思想,不过个人觉得在使用的时候没有把这种思想发挥到极至。不知道楼主写JSON LIB的思想源于哪里?想和楼主探讨一下。
先说我一下我的思想,我是根据编译原理的思想来实现我的JSON LIB,分为Lexer和Parser,Parser驱动Lexer进行词法分析,然后对Lexer读取到的Token根据上下文进行语法检查。
还有一个C#实现
http://johnson-lee.iteye.com/blog/586715
基本上和Java实现差不多,只不过加了C#的索引器和属性,使得用起来更像JSON
源码:http://johnson-lee.iteye.com/blog/586686
看了楼主的Code,觉得用Handler这个接口,体现了设计模式的思想,不过个人觉得在使用的时候没有把这种思想发挥到极至。不知道楼主写JSON LIB的思想源于哪里?想和楼主探讨一下。
先说我一下我的思想,我是根据编译原理的思想来实现我的JSON LIB,分为Lexer和Parser,Parser驱动Lexer进行词法分析,然后对Lexer读取到的Token根据上下文进行语法检查。
还有一个C#实现
http://johnson-lee.iteye.com/blog/586715
基本上和Java实现差不多,只不过加了C#的索引器和属性,使得用起来更像JSON
想要写这个是因为发现dwr的一些不足之后要自己动手做一个JROI(javascript remote object invoker),但是在写JROI的过程中序列化的时候出现了问题
至于编译原理的思想我考虑过,还是复用性,毕竟编译也会有变化,所以才这样设计
3 楼
gof95
2010-02-04
和jackson相比呢?这个是目前最快的
2 楼
johnson.lee
2010-02-04
我自己也写了一个JSON LIB
源码:http://johnson-lee.iteye.com/blog/586686
看了楼主的Code,觉得用Handler这个接口,体现了设计模式的思想,不过个人觉得在使用的时候没有把这种思想发挥到极至。不知道楼主写JSON LIB的思想源于哪里?想和楼主探讨一下。
先说我一下我的思想,我是根据编译原理的思想来实现我的JSON LIB,分为Lexer和Parser,Parser驱动Lexer进行词法分析,然后对Lexer读取到的Token根据上下文进行语法检查。
还有一个C#实现
http://johnson-lee.iteye.com/blog/586715
基本上和Java实现差不多,只不过加了C#的索引器和属性,使得用起来更像JSON
源码:http://johnson-lee.iteye.com/blog/586686
看了楼主的Code,觉得用Handler这个接口,体现了设计模式的思想,不过个人觉得在使用的时候没有把这种思想发挥到极至。不知道楼主写JSON LIB的思想源于哪里?想和楼主探讨一下。
先说我一下我的思想,我是根据编译原理的思想来实现我的JSON LIB,分为Lexer和Parser,Parser驱动Lexer进行词法分析,然后对Lexer读取到的Token根据上下文进行语法检查。
还有一个C#实现
http://johnson-lee.iteye.com/blog/586715
基本上和Java实现差不多,只不过加了C#的索引器和属性,使得用起来更像JSON
发表评论
-
Javascript Remote Object Invoker - Beta1
2010-02-09 22:20 1288第一个测试版本,可以 ... -
第一版,可以理解为Preview
2010-02-08 23:44 991基于前两天写的一个Coderhttp://zcy860511. ... -
在递归再递归之后,终于解决了泛型嵌套问题。。。
2010-02-07 01:25 4203总算给折腾出来了,只要定义泛型就可以完成Bean的转换 下面是 ... -
Java获得泛型类型
2010-02-02 16:21 10354最近要想获得泛型类型,总结多方意见,再通过实践,最终获得了结果 ...
相关推荐
`jsonlib24_JSON_`这个标题可能指的是JSONlib的第2.4版本,这是一个针对JSON操作的库,适合那些需要在Java项目中处理JSON数据的开发者。JSONlib提供了多种方法来解析JSON字符串到Java对象,以及将Java对象转换为JSON...
JSONlib是一个广泛使用的Java库,专门用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,因其简洁、易于读写和解析的特性,在Web服务和跨平台通信中得到了广泛应用。JSONlib...
"json lib jar包"就是这样一个库,它为Java开发者提供了方便的JSON操作功能,包括JSON对象的创建、解析、序列化和反序列化等。这个jar包包含了处理JSON所需的所有类和方法,可以直接导入到项目中使用,无需理解复杂...
这里提到的“lib”很可能是指一个特定的JSON库,例如`json-c-0.9`,这可能是一个C语言实现的JSON处理库。`json-c`是一个开源项目,提供了对JSON的支持,包括将JSON对象转换为C的数据结构,反之亦然,同时也支持JSON...
1. `inc`目录:包含了头文件,这些头文件定义了JSON库的API接口,开发者在自己的代码中引用这些头文件,可以调用库提供的功能,如创建、读取、修改和写入JSON数据。 2. `lib`目录:包含了库文件,通常是静态库或...
总结来说,这个资源提供了一个编译好的JSON处理库,开发者可以通过引用json.h头文件和链接lib文件,在自己的C++项目中方便地进行JSON数据的解析和生成,大大简化了与JSON数据交互的工作。无论是进行网络通信、存储...
`json-lib` 是一个Java库,它提供了一套全面的工具来处理JSON,特别是在Java环境中。 在Java开发中,我们经常遇到需要将Java对象转换为JSON字符串,或者从JSON字符串反序列化成Java对象的需求。`json-lib` 库就是...
在本案例中,"json写的超酷的博客模板"指的是一个使用JSON数据来驱动和构建博客页面的模板。这样的设计可以使页面内容更加动态、灵活,并且易于更新。 博客模板通常包括各种页面元素,如头部、导航栏、文章列表、侧...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序...然而,在现代开发环境中,选择一个适合自己项目的JSON库至关重要,因此在实际应用中,应根据项目需求评估并选择最佳选项。
- **commons-logging-1.1.1.jar**: Apache Commons Logging是一个日志抽象层,允许开发者选择自己喜欢的日志实现,如log4j或java.util.logging,它为JSON处理库提供了日志记录功能。 这些库的组合使得在Java中处理...
想学习ExtMVC实现的增删改查,去网上下载了个一看是坑爹的,根本不是程序,一气之下自己花了一下午写了这个完整的 ExtMVC+mysql +servlet+Json-lib实现用户的增删改查,供大家学习、指导
dooringx-lib 在运行时维护一套数据流,主要分为json数据部分,左侧组件部分,右侧配置项部分,快捷键部分,弹窗部分,事件与函数部分,数据源部分。其除了提供基础的拖拽、移动、缩放、全选、旋转等功能外,还可以...
1. **json-lib-2.4-jdk15.jar**:这是Json-lib库的一个版本,它提供了一个跨Java版本的JSON处理API。Json-lib支持多种类型的数据转换,包括JavaBeans、Map、List、数组等,使得JSON对象可以方便地与Java对象相互转换...
每个库都有自己的特点和适用场景,选择哪一个取决于项目的具体需求。例如,如果你需要高度的灵活性和性能,Jackson可能是最佳选择;如果简单易用性更重要,Gson或Fastjson可能更合适。 在Java项目中,为了使用这些...
2. `json-lib-2.2.3-jdk15.jar`: JSON-lib是一个多语言支持的JSON处理库,这个版本是针对JDK15的。它可以将Java对象转化为JSON格式,反之亦然,方便数据的序列化与反序列化。例如,你可以将Java的HashMap轻松地转化...
本资源提供的"android工具集(lib包)"就是一个这样的类库,其核心是`utilcode`文件夹,包含了一系列的Java或Kotlin类和方法。下面我们将详细探讨这个工具集中的关键知识点。 首先,`utilcode`通常包含了多个实用...
【标题】"自己写的Python项目.zip"所代表的是一个包含了作者自行开发的Python项目的压缩文件。这个项目可能是一个完整的软件应用、数据处理脚本、自动化工具或者任何其他基于Python编程语言构建的解决方案。Python因...
本文将详细解析标题为“java收发短信jar版,不需要自己写代码”的资源,包括其核心功能、如何使用以及可能涉及的技术点。 该资源提供了一个预打包的jar文件——sendsMs-WjUtil01.jar,它是一个Java库,专门用于短信...
为了在C++程序中解析和生成JSON,我们需要一个库来帮助我们完成这个任务。"win下json编译好的静态库"就是针对这种情况提供的一种解决方案。 在这个场景中,我们提到的“静态库”是相对于动态库(DLL)而言的。静态...
cppjson-include-lib.zip 是一个压缩包,其中包含了与JSONcpp相关的开发资源,适用于使用Visual Studio 2017进行编程。JSONcpp是一个开源库,主要用于解析、生成JSON(JavaScript Object Notation)格式的数据,这是...