`
berdy
  • 浏览: 513607 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表

MVEL 简单介绍

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  封装 ...

Java NIO

    博客分类:
  • Mina
众所周知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 ...
Global site tag (gtag.js) - Google Analytics