- 浏览: 1602694 次
- 性别:
- 来自: 上海
最新评论
-
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
使用 HTML5 WebSocket 构建实时 Web 应用 -
秦时明月黑:
Jetty 服务器架构分析 -
chenghaitao111111:
楼主什么时候把gecko源码分析一下呢,期待
MetaQ技术内幕——源码分析(转) -
qqggcc:
为什么还要写代码啊,如果能做到不写代码就把功能实现就好了
快速构建--Spring-Boot (quote) -
yongdi2:
好厉害!求打包代码
Hadoop日志文件分析系统
文章列表
简介
Curator最初由Netflix的Jordan Zimmerman开发, Curator提供了一套Java类库, 可以更容易的使用ZooKeeper.
所谓ZooKeeper技巧(ZooKeeper Recipes),也可以称之为解决方案, 或者叫实现方案, 是指ZooKeeper的使用方法, 比如分布式的配置管理, Leader选举等
试用配置管理库typesafe.config
Typesafe的Config库,纯Java写成、零外部依赖、代码精简、功能灵活、API友好。支持Java properties、JSON、JSON超集格式HOCON以及环境变量。它也是Akka的配置管理库.
Overview
纯java实现,无任何依赖
充分的测试
支持: Java properties, JSON, and a human-friendly JSON superset
可以合并各种格式的配置文件
可以通过文件、urls、classpath加载配置
支持多层嵌套的配置方式
识别Java system pro ...
SBinary 和 Scalacheck的一部分库,广泛使用了隐式参数。让人联想起了Haskell(一种函数式编程语言)的编程风格,我真心的希望在Scala中这种编程风格更加广泛。这是一种非常有用的技术。
作为开始如下多重入参(柯里化)的例子:
scala -> def foo(x: Int)(y: Int) = x+y
foo: (x: Int)(y: Int) Int
scala -> foo (1) (2)
ret0:Int = 3
scala> foo(1, 2);
:6: error: wrong number of arguments f ...
胜败兵家事不期,包羞忍耻是男儿——斗牛士fighting,fighting,fighting...
小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格 ...
cala中特质定义:包含一些字段,行为(方法/函数/动作)和一些未实现的功能接口的集合,可以方便的实现扩展或混入到已有类或抽象类中。
scala中特质(trait)是一个很有用的特性,在程序设计中可以 更好的抽象现实,使程序更关注各自功能和更好的将程序拆分成多个特质模块,使程序具有更强的扩展性。熟悉java的同学,可以将特质理解为抽象类,但是scala中可以在一个类中同时混入多个特质(使用extends 或with),而java中一个类只能继承一个抽象类,如果要实现多个抽象类就必需使用多继承。scala中很多基础类型功能扩展都使用了特质的特性,例如,基础类型中的布尔操作和比较接口 ...
package cn.yangg.scala.base.init
import java.io.Closeable
import java.nio.channels.ServerSocketChannel
import java.net.InetSocketAddress
import java.nio.channels.SocketChannel
import java.nio.charset.Charset
import java.nio.ByteBuffer
import akka.actor.Actor
import java.nio.channels.Sele ...
package cn.yangg.scala.base.init
object Start {
def main(args:Array[String]){
valpath="/Users/yangguo/tool/mvn.ln"
valurl="http://www.baidu.com"
readDataUseJavaApi(path)
readDataUseScalaApi(path)
readDataFromUrl(url)
}
def readDataUseJavaApi(path:St ...
package cn.yangg.scala.akka.init
import akka.actor.Actor
import akka.actor.Props
import akka.actor.ActorRef
import akka.actor.Terminated
import akka.event.Logging
import akka.actor.ActorSystem
import akka.pattern.ask
import scala.util.Success
import scala.util.Failure
import scala.conc ...
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:
我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。
Java NIO和IO的主要区别
下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。
IO NIO
面向流 面向缓冲
阻塞IO 非阻塞IO
无 选择器
面向流与面向缓冲
Java NIO和IO之间第一个最大的区别是,IO是 ...
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。
这里是Pipe原理的图示:
创建管道
通过Pipe.open()方法打开管道。例如:
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。
打开 DatagramChannel
下面是 DatagramChannel 的打开方式:
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。
这里有个例子:
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:
打开一个SocketChannel并连接到互联网上的某台服务器。
一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。
打开 SocketChannel
下面是SocketChannel的打开方式:
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。
FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。
打开FileChannel
在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。下面是通过RandomAccessFile打开FileChannel的示例:
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。
下面是本文所涉及到的主题列表:
为什么使用Selector?
Selector的创建
向Selector注册通道
SelectionKey
通过Selector选择通道
wakeUp()