摘要: 缓冲区(Buffer)对象是面向块的I/O的基础,也是NIO的核心对象之一。在NIO中每一次I/O操作都离不开Buffer,每一次的读和写都是针对Buffer操作的。Buffer在实现上本质是一个数组,其作用是一个存储器,或者分段运输区,并且提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。对于传统的流I/O,这是一种设计上的进步。 为了方便理解,下面我会主要采用代码示例加注释的方式说明缓冲区比较重要的API和知识点。缓冲区基础 Buffer缓冲区的家谱如下图: 作为所有缓冲区类的父类,Buffer类的包含了下面4个重要属性, // Invariants: mark... 阅读全文
posted @ 2013-07-17 11:31 朱样年华 阅读(1895) 评论(2) 推荐(2) 编辑
摘要: Java NIO的出现 Java语言发展至今,优点大家有目共睹:面向对象的语言、简洁有效、高移植性等等。但是同样也存在很多缺点,C语言程序员口中Java太慢了,.net程序员口中Java太开放了,php程序员说Java太复杂了。 Java为了“一次编写,到处运行”的最大优势,也付出了相应的代价: Java需要运行于虚拟机(即JVM)之上,为了保证Java字节码在各种JVM部署平台上运行效果一致,作些妥协是必须的。既然需要通用于不同的操作系统平台,那么,某种程度上就必须选择各种平台都接受的处理方案。这也就造成了Java不能发挥各种平台的特性和优化的地方。 受到这种机制的影响最突出的莫... 阅读全文
posted @ 2013-07-03 11:37 朱样年华 阅读(4316) 评论(0) 推荐(0) 编辑
摘要: 概述 在大部分的行业系统或者功能性需求中,对于程序员来说,接触到io的机会还是比较少的,其中大多也是简单的上传下载、读写文件等简单运用。最近工作中都是网络通信相关的应用,接触io、nio等比较多,所以尝试着深入学习并且描述下来。 io往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,io问题渐渐成了核心问题。Java传统的io是基于流的io,从jdk1.4开始提供基于块的io,即nio,会在后面的文章介绍。流 流的概念可能比较抽象,可以想象一下水流的样子。 io在本质上是单个字节的移动,而流可以说是字节移动的载体和方式,它不停的向目标处移动数据,我们要做的就是根据流的... 阅读全文
posted @ 2013-04-10 15:07 朱样年华 阅读(5426) 评论(3) 推荐(2) 编辑
摘要: 最近工作中,接触到了Java网络编程方面的东西:Socket、NIO、MongoDB等,也看了tomcat的源码,也加强了线程方面的知识,也使用了MINA这样的框架。感觉获益良多,原本技术上的薄弱环节也在慢慢提高,很多想写的东西,也在慢慢规划整理。无奈最近在筹备婚礼的事情,显得有些耽搁。 想了很久,决定先写写IO中经常被提到的概念——“同步与异步、阻塞与非阻塞”以及在Java网络编程中的简单运用。 想达到的目的有两个: 1。深入的理解同步与异步、阻塞与非阻塞,这看似烂大街的词汇很多人已经习惯不停的说,但却说不出其中的所以然,包括我。 2。理解各种IO模型在Java网络IO中的运用,... 阅读全文
posted @ 2012-09-28 16:14 朱样年华 阅读(21472) 评论(6) 推荐(6) 编辑
摘要: 概述单例模式可以说是大伙儿最熟悉的模式之一了。说简单是最简单的一种模式,但是深究复杂起来也可以是最复杂的模式。单例模式和其他的创建型模式不同,其他的创建型模式关心的问题是如何创建对象,获得所谓的产品;而单例模式却是关心对象创建的次数以及何时创建。单例模式的优点使用等等GOF都简单的说明了,这里就不说了。目的希望对象只创建一个实例,并且提供一个全局的访问点。分析我们试想几个场景,慢慢来深入单例模式。场景一:假设有一艘海盗船,船员会有很多个,而船长只有一名。我们下意识的就会给出下面的代码: 1: /** 2: * 单例模式 3: * @author zhusw 4: * @... 阅读全文
posted @ 2012-07-23 09:33 朱样年华 阅读(1464) 评论(2) 推荐(0) 编辑
摘要: GOF关于工厂方法的概念1.1意图定义一个用于创建对象的接口,让子类来决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。1.2 别名虚构造器(Virtual Constructor)1.3 实用性在同时满足下列情况下可以使用Factory Method模式:当一个类不知道他所必须创建的类的对象的时候;当一个类希望由它的子类来指定他所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。(后半句看不太明白,查了下原文,我个人理解的意思是“创建对象时,我们不必关心具体是由哪个子类来创建的”)1.4 结 阅读全文
posted @ 2012-07-05 14:55 朱样年华 阅读(1405) 评论(3) 推荐(1) 编辑
摘要: 这次来学习另一个创建型设计模式:Builder生成器模式。GOF对Builder模式的定义(1)意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(2)适用性1. 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式;2. 当构造过程必须允许构造的对象有不同的表示;(3)结构(4)参与者 Builder:为创建一个Product对象的各个部件指定抽象接口 ConcreteBuilder:1. 实现Builder的接口以构造和装配该产品的各个部件 2. 定义并明确它所创建的表示 3. 提供一个检索产品的接口 Director:构造一个使用... 阅读全文
posted @ 2012-05-25 14:53 朱样年华 阅读(1448) 评论(1) 推荐(4) 编辑
摘要: 1.概念 抽象工厂模式,顾名思义,所谓工厂即是批量制造产品的地方。在Java中,抽象工厂模式用来创建对象。根据GOF对模式的分类,抽象工厂模式属于创建型对象模式。 先来说一些概念,《设计模式》中对抽象工厂模式的定义如下:提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类。 为了更好的描述抽象工厂,吸取前人对抽象工厂的理解,这里引入一个新的概念帮助理解抽象工厂:产品族。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。 举个例子来帮助理解,汽车按类型可分为:轿车、客车、货车。汽车按品牌可分为:奔驰、宝马、大众。(先不管奔驰宝马有没有货车,just an... 阅读全文
posted @ 2012-03-26 16:07 朱样年华 阅读(1617) 评论(2) 推荐(3) 编辑
摘要: 什么是设计模式? 引用GOF的《设计模式》一书的两句话:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次的使用该方案而不必重复劳动。 设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。 由此看来设计模式其实就是帮助我们针对某个特定场景下的问题,提出一套通用的可重复使用的方案来解决这个问题。 设计模式有四个基本要素: 1 模式名称(pattern name):模式名称就是一个模式的名字,如何用简短的词汇来表达一个模式的特征是很重要的; 2 问题(problem):描述了应当在何时使用模式,也就是该模式通常可以解... 阅读全文
posted @ 2012-03-21 16:35 朱样年华 阅读(1052) 评论(0) 推荐(1) 编辑
摘要: 有感于马上要做个比较大的业务系统,想到那无止境的增删改查、粘贴复制,顿时脑后升起一阵凉风。于是想到个找或者写一个Java代码的生成器,这样在正常开发进度下,也能余下更多的时间去做些别的事情。 闲话少说,首先总结下需求: 我需要的这个工具能够读取数据库表结构,通过对字段类型、名称等分析得到需要的各种变量,根据模板生成相应的pojo类、hibernate的xml配置文件、dao和service的接口和类。 需求看起来很简单,但是一是没搞过这样的小工具,二是技术不过关,所以还是想到了找找有没有开源的代码拿过来根据自己的需求改。 于是找到了rapid-generator这个开源工具,同学们... 阅读全文
posted @ 2012-02-29 17:07 朱样年华 阅读(26674) 评论(2) 推荐(10) 编辑