- 浏览: 513212 次
- 性别:
- 来自: 广州
最新评论
-
fatherican:
写的好。
Netty 4 源码分析——EventExecutor -
hong52533:
大哥,请问你用 groovy Httpbuilder post ...
groovy 操作http请求 -
DEMONU:
能详细讲讲代码实现就更好了
Activemq中的KahaDB消息日志的恢复机制 -
plmmmmlq:
爱死你了,困惑我几天的问题终于解决了。自定义dialog中加载 ...
解决Android帧动画在Oncreate中启动只显示第一帧 -
517505440:
org.springframework.beans.facto ...
Apache XBean 简单介绍
文章列表
MVEL是一种基于java语法的表达式语言,为java提供更便捷灵活的动态性。
这里简单介绍一些MVEL的操作:
new 创建一个java对象,new String("foo"),当然这里是举个栗子,String的创建一般是不同这个构造函数的。
对于java.lang.*中的类,无需手动导入。如果是创建自定义的对象,就需要写明类全路径名,或者手动导入。
当需要针对同一个对象进行多次操作时,可以是with语句块来高效操作,
with(user = new User()) {
name = 'jacker',age = 18,sex = Sex.FEMALE
}
更便捷是可 ...
先从EventExecutor开始,因为它是一个很基础的工具类,是对I/O线程的包装。先了解下它的源码会对后面的分析有更好的理解。
先看下EventExecutor的类关系图,这里只是简单的画出了类和接口的继承和实现关系,还有其他的聚合关系没有画出来,为的是便于分析思路的清晰。
说到Executor,很容易联想到jdk中 java.util.concurrent.Executor 接口,这个接口非常简单,就一个方法
void execute(Runnable command);
从方法签名上就能看出这个是为了支持异步模式的。command表示一个命令。当前线程就是命令者角色,Ex ...
看了两天的netty源码,现在总算有了些眉目了。下面是用excel画的一个简单的结构图
Channel是对最终I/O处理的封装
EventExecutor 封装了负责处理I/O 事件的线程
ChannelHandler 处理相关I/O Event的扩展接口,分为ChannelInboundHandler和[*]ChannelOutboundHandler,分别处理不同流向的事件
ChannelHandlerContext 对ChannelHandler相关信息的包装
ChannelPipeline 组装多个ChannelHandlerContext的管道,I/O事件在这个管道中流动
...
这两天看了下Mina和Netty的源码,想比较来说Mina的结构简洁易懂。Mina和Netty出自同一人,而Netty是作者对Mina的重构版,改进了很多。如果学习网络编程的话,个人建议从Mina开始,学完Mina后再看Netty,学习曲线会变得很平滑;同时还能深刻理解到作者改进点。
先看下Mina的结构图,如果之前做过java的web开发,熟悉servlet规范,看到这个结构图,会觉得非常亲切。这个结构描述了基本的网络开发结构。
IoService 服务端和客户端I/O 操作的抽象,服务端为IoAcceptor,客户端为IoConnector
IoSession 封装 ...
众所周知Mina是一个基于java NIO的网络框架,那么在了解Mina之前,需要先了解下java NIO。jdk1.4中引入了NIO的相关api,主要是针对解决一些高并发高吞吐的IO。API的类图如下(网上找的)
主要的三个概念:
1、Channel
2、Buffer
3、Charset
下面主要介绍下Channel和Buffer,因为这两个是相辅相成的。Charset用来辅助解决字符编码的问题。与Stream不同,Channel是面向Buffer的;Channel只能往Buffer中写数据,或者从Buffer中读数据。另外,Channel是双向的,同一个Channel既可以从Buffe ...
这里介绍下使用java的socket编程,搭建一个server与client的通信框架。先看一段代码:
Server端
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket sock ...
volatile 是java中用来解决多线程的共享访问问题的,不过它解决的是变量级别的。不同于syncronized解决的是方法和代码块级别的。
在java的多线程的内存模型中存在main memory和work memory。main memory是所有线程共享的,而work memory是指各个线程自己的。对于共享变量的访问,线程是先从main memory中copy一份到work memory中,操作完毕后再把work memory中的变量值写回到main memory。很明显这个过程中变量的可见性就无法保证了。
如果将变量声明为volatile,则可以保证变量的可见性,实现的原理也很 ...
使用eclipse的m2e插件创建了一个工程,在src/main/resources下添加了一个空目录 test发现m2e插件在build project的时候,并未将test 同步到原来设置的output folder下。可以通过在project的pom.xml文件中配置插件的属性解决
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuratio ...
新的游戏项目上线后,接了很过国内的推广渠道的SDK,其中一个很繁琐的问题就是打包,每次升级版本都要打几十个包;如果人肉操作的话非常费劲,而且很容易出错。正好Android的SDK中也提供了ant来脚本化打包操作。所以就针对公司里游戏项目的结构对ant打包脚本,添加了些功能。将游戏中的所有可配置的内容全部整理build.properties文件中,比如说游戏中的日志开关,正式环境和测试环境的测试地址,渠道标记、版本号等等
Ant本身提供了非常便捷灵活的扩展方式,所以有很多第三方的扩展包。xmltask就是一个非常方便的操作xml文件的扩展。http://sourceforge.net/p ...
上午导入了下游戏服务器端的代码,是使用java开发的,通过maven对多个工程模块进行管理
eclipse安装了1.4版本的m2e后,在工程目录下执行mvn eclipse:eclipse后,导入eclipse 中。
通过m2e插件update project时提示了如下的错误"Updating Maven Project". Unsupported IClasspathEntry kind=4
stackoverflow上搜索了下,发现是m2e的一个bug。
http://stackoverflow.com/questions/10564684/how-to-fix-er ...
eclipse中安装好pydev,最近安装的时候总是提示不成功。
提示错误连接超时 Read time out。后来爬出去后再安装,ok了
配置好pydev后,新建一个module,print 'hello world',
结果却提示SyntaxError: Non-ASCII character '\xe5' in file
查看了错误信息中的链接,发现原来python解释器在读取到文件中有
非ASCII字符时,需要源文件中有coding hint。
解决办法就是要在 python源文件的第一或第二行给出coding hint。添加
# coding=utf-8
具体的格式必须匹配这个表达 ...
用数据线连接android手机到pc,却在eclipse中Device view中未发现设备信息。提示错误信息如下:
adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *
确认手机上的usb调试已打开,adb kill-server,adb start-server 还是未能解决。
stackoverflow上搜索一番得到解决办法如下
C:\Documents and Settings\Administrator>adb nodaemon server
canno ...
昨天升级了android的开发的eclipse插件adt,升级到22.0.1。
发现原来的工程导出apk后安装都出现了java.lang.NoClassDefFoundError。
所有有依赖其他library工程的都出现编译错误,提示library工程中的类无法找到。
几经摸索,终于解决。
ADT 22.0.1 升级后在 project property 中的order and export中增加了Android Private Libraries。
其实这里的的所谓Private Libraries 就是工程中的libs目录下引入的jar包。点击Libraries选项卡可以看到
...
发现Android中的AlertDialog原来可以使用方法链式来创建和显示
new AlertDialog.Builder(this).setTitle("提示").setMessage("提示消息")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
...
做了个简单的帧动画,在onCreate方法中start,发现只能看到第一帧
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<item
android:drawable="@drawable/fire0 ...