`
文章列表
本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。 -------------------------------------- 实战CGLib系列文章 本篇介绍接口生成器InterfaceMaker。 一、作用: InterfaceMaker会动态生成一个接口,该接口包含指定类定义的所有方法。 二、示例: 比较简单,先定义一个类,仍使用本系列第一篇中的那个ConcreteClassNoInterface类,该类包含3个方法: public class C ...
本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。 -------------------------------------- 实战CGLib系列文章 本篇介绍改进版延迟加载器Dispatcher。 一、作用: 上一篇文章中,介绍了延迟加载器LazyLoader。本篇介绍另一种延迟加载接口Dispatcher。 Dispatcher接口同样继承于Callback,也是一种回调类型。 但是Dispatcher和LazyLoader的区别在于:LazyLoad ...
最近利用业余时间在看Java NIO,期间读了线程大师Doug Lea那篇很经典的《Scalable IO in Java》。在此写一写看过之后,对于Socket编程模型演变的一些理解。 首先,对于网络编程,一般都有一个共同的流程: (1)读请求. (2)解码请求. (3)计算处理逻辑. (4)编码响应. (5)发送响应.   一、经典阻塞IO模型: (图片来源:《Scalable io in java》ppt,下同) 如图,对于每一个请求都分发给一个线程,每个线程中都独自处理上面的流程。 这种模型由于IO在阻塞时会一直等待,因此在用户负载增加时,性能下降的非常快。 ...
本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。 -------------------------------------- 实战CGLib系列文章本篇介绍延迟加载器LazyLoader。一、作用:说到延迟加载,应该经常接触到,尤其是使用Hibernate的时候,本篇将通过一个实例分析延迟加载的实现方式。LazyLoader接口继承了Callback,因此也算是CGLib中的一种Callback类型。 二、示例:首先定义一个实体类LoaderBean,该Bean ...
本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。 -------------------------------------- 实战CGLib系列文 ...
最近在GitHub上发现一个有趣的项目——NanoHttpd。 说它有趣,是因为他是一个只有一个Java文件构建而成,实现了部分http协议的http server。 GitHub地址:https://github.com/NanoHttpd/nanohttpd  作者最近还有提交,看了下最新的代码,写篇源码分析贴上来,欢迎大家多给些建议。 ------------------------------------------ NanoHttpd源码分析 NanoHttpd仅由一个文件构建而成,按照作者的意思是可以用作一个嵌入式http server。 由于它使用的是Socket ...
前一段时间在看关于如何测定JVM中对象占用的内存,涉及到JVM堆中对象结构相关知识。 在网上看到一篇比较不错的文章,分享出来,希望对看到的人有所帮助。 --------------------------------- 原文地址:http://www.javamex.com/tutorials/me ...
本文主要通过一个非常简单的Server实例总结一下基于Java非阻塞IO的网络编程。 希望对大家有所帮助,欢迎拍砖! 一、Server端代码: 该示例主要实现一个简单功能,server端直接打印客户端发送的数据。 由于例子非常简单,一个线程循环处理所有任务,算是一个最简单的NIO Server吧(实际应用开发中是不会采用这种方式的)。 MyNIOServer.java: public class MyNIOServer { private static final int TIMEOUT = 30000; private static final int BUFSI ...
本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。 -------------------------------------- 实战CGLib系列文章 本篇介绍通过MethodInterceptor和Enhancer实现一个动态代理。 一、首先说一下JDK中的动态代理: JDK中的动态代理是通过反射类Proxy以及InvocationHandler回调接口实现的,不了解的同学请参考我的这篇Blog:Java动态代理详解 http://shensy.iteye. ...
最近工作中写了一个抓取第三方应用数据的程序,该数据格式为JSON。 刚开始在JSON解析时使用的是开源工具jackson,遇到了问题。例如: { "code": 200, "data": "{'v-soft-list':[{typecode:'zhuanbi',gametype:'赚币',count:5},{typecode:'dongzuo',gametype:'动作',count:12},{typecode:'maoxian',gametype:'冒险',count:14},{typecode:'xiuxian',gametype ...
本文主要是对Java常用BIO(阻塞IO)操作的一个总结,整理一下分享出来,希望对看到的人有所帮助,同时也希望多多拍砖! 一、IO流: Java IO主要以流的方式操作,流就是数据传输,按传输方向分为输入流和输出流,按数据类型分为字符流和字节流。字节流以字节8bit为单位,字符流以字符为单位,处理多个字节。因此处理纯文本数据,就优先使用字符流,除此之外使用字节流。 字节流分别是InputStream、OutputStream的实现类。字符流分别是Reader、Writer的实现类。 二、数据读取: (此处记录的部分代码实例忽略了流关闭操作,使用时请自行添加) 1、FileRead ...
本系列文章均整理自我在先前一家公司的CGLIB使用总结和笔记。鉴于CGLIB文档及示例较少,因此分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。 ------------------------------------ CGLIB介绍与原理(部分节选自网络) ...
本系列的上一篇文章已经介绍过,IO的阻塞与非阻塞看的是发起IO请求时是否会被阻塞。 一、使用阻塞IO: 在原来进行Java Socket网络编程时,每打开一个I/O通道,read()就一直等待读取字节内容,如果内容没有准备好,read()会阻塞直到数据到来,但此时线程不能做其它事情,所以解决方法就是开辟一个线程池,把每个请求分发到一个线程中去,让线程去等待。 存在的问题: 一个客户端一个线程的方式去处理,则由于创建、维护和切换线程需要的系统开销导致系统扩展性方面受到了很大限制。对于连接生存期比较长的协议来说,线程池的大小仍然限制了系统可以同时处理的客户端数量。如果增加线程池的大小,将 ...

关于回调

本文主要是自己对于回调的一些总结记录,如果有错误欢迎大家指正。 程序从调用方式上可以分为三类:同步调用、回调和异步调用(另开辟线程调用),本文主要讨论回调。 个人感觉,回调很像设计模式中的strategy策略模式,原因如下: 首先,定义一个回调接口: public interface CallBack { public void exec(); } 定义一个Client类实现该接口: public class Client implements CallBack{ public void exec() { System.out.println("Clie ...
原先对于IO模型的认识总是很模糊,前段时间系统的学习了一下,分享出来,希望对看到的人有帮助。 UNIX网络编程中,将IO模型划分为5种: (1)阻塞IO (2)非阻塞IO (3)信号驱动IO (4)IO复用 (5)异步IO 1、IO操作的2个步骤: 以上5种IO操作都分成了两个步骤:发起IO请求和实际IO操作。 (1)发起IO请求:IO请求一般需要请求特殊资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。 (2)实际IO操作:真正进行数据接收。 2、IO分类: 步骤1(发起IO请求):分为阻塞IO和非阻塞IO,区别( ...
Global site tag (gtag.js) - Google Analytics