- 浏览: 169707 次
- 性别:
- 来自: 杭州
最新评论
文章列表
原文:《Netty入门之WebSocket初体验》
Netty简述
Netty是一个事件驱动型、异步非阻塞的高性能 Java IO 框架。 它对 Java NIO 框架作了封装与改进,提供了良好的稳定性和伸缩性,可简化网络应用的开发。很多项目将其作为底层Socket ...
原文:《Java NIO AsynchronousFileChannel》
AsynchronousFileChannel 使得异步读写文件成为可能。此教程将解释如何使用该类。
创建一个 AsynchronousFileChannel
可通过 AsynchronousFileChannel.open() 方法创建实例:
Path path = Paths.get("C:\\test\\file1.txt");
AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, ...
原文:《Java NIO Files》
Java NIO 的 Files 类(java.nio.file.Files)提供了多个方法用于操纵文件系统中的文件。此教程包含这些方法中最常用的几个。Files类包含了许多方法,如果你需要的方法未包含在此教程中,可以去查看JavaDoc。
...
原文:《Java NIO Path》
Java NIO Path 接口是 NIO 2 更新的一部分。其全称为 java.nio.file.Path。
一个 Path 实例表示文件系统中的一个路径(path)。path 可以是一个文件或目录。它可以是绝对路径,也可以是相对路径。 绝对路径包含 ...
原文:《Java NIO vs. IO》
当学习Java NIO 和 IO 的API时,很快会遇到一个问题: 什么时候用IO,什么时候用NIO?
我会尝试在本文提供一些关于Java NIO 与 IO 的不同点、使用案例、及它们将如何影响代码设计方面的见解。
NIO 与 IO ...
原文:《Java NIO Pipe》
Java NIO 的 Pipe 是一个线程间的单向数据连接。一个Pipe有一个 source channel 和 一个 sink channel。你可以向 sink channel 写入数据。这些数据可以从 source channel 中被读出。
简化结构如下:
创建Pipe
Pipe pipe = Pipe.open();
向Pipe写数据
向Pipe写数据就是向其中的 sink channel 写数据:
Pipe.SinkChannel sinkChannel = pipe.sink();
// byte ...
原文:《Java NIO DatagramChannel》
DatagramChannel是可以发送与接收UDP数据包的channel。因为UDP是无连接的网络协议,所以你不能像操作其它channel那样对其读写。你需要发送或接收数据包。
开启DatagramChannel
DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));
该示例代码开启了一个 DatagramChannel,可以从 9999 这个端口接收数据包。 ...
原文:《Java NIO: Non-blocking Server》
GitHub 上的实例代码
https://github.com/jjenkov/java-nio-server
非阻塞IO管道
非阻塞IO管道是一系列组件的链接。简化结构如下(读写都适用):
Component 利用 Selector 来监测是否有 Channel 就绪可 ...
原文:《Java NIO ServerSocketChannel》
Java NIO 中的 ServerSocketChannel 用于在TCP通信中监听来自客户端的连接。
开启 ServerSocketChannel
ServerSocketChannel channel = ServerSocketChannel.open();
关闭 ServerSocketChannel
可直接调用 ServerSocketChannel.close() 方法,也可以 try-with-resources 的方式关闭。
channel.close();
...
原文:《Java NIO SocketChannel》
Java NIO 中的 SocketChannel 用于处理 TCP 网络连接。
开启 SocketChannel
示例:连接远程服务器
SocketChannel channel = SocketChannel.open();
channel.connect(new InetSocketAddress("abc.xyz", 80));
ServerSocketChannel.accept() 方法也会返回SocketChannel实例。那属于服务端的操作,将在ServerSocketCha ...
注:利用 FileChannel.transferTo 和 FileChannel.transferFrom 方法可以更高效地读写文件。
(《FileChannel 数据传输》)
原文:《Java NIO FileChannel》
Java NIO 中的 FileChannel 可用于读写文件。FileChannel 总是以 阻塞 模式运行,不支持非阻塞模式。
开启 FileChannel
可通过调用 FileInputStream、FileOutputStream 或 RandomAccessFile 的 getChannel() 方法来获得 FileChanne ...
原文:《Java NIO Selector》
Selector 可以检查多个 Channel 实例,发现那些已经就绪,可以读/写的 Channel。通过这个机制,可以实现 单线程处理多个Channel,从而处理多个网络连接。
为什么要使用 Selector ?
对操作系统来说,线程之间的切换代价较高,而且每个线程都会占用一些内存资源。所以线程越少越好。而利用Select可以实现只用一个线程处理多个 Channel。
现代操作系统和CPU在多任务处理方面越来越强,多线程开销也更小了。事实上,对于一个多核CPU,如果不采用多任务,可能就是在浪费CPU的算力。但这些属于另一个话题 ...
前言
JMX(Java Management Extensions)这项技术可用于监管Java应用。通常是由被监管程序开启JMX服务,再通过 JConsole、JMC、VisualVM之类的工具利用该JMX服务远程监管目标程序。
与 JProfiler 相比,这种方式显得很繁琐笨拙,更容易遇到各种奇怪的问题。JProfiler 只需提供目标服务所在机器的 root 密码并指定 jdk 所在目录就能对目标服务进行监控,且不需要重启目标服务,监控功能更丰富。所以只要公司钱够,就考虑买 JProfiler 吧。但还是有些场景需要目标程序开启JMX服务。为了避开某些坑,特提供样例。
...
原文:《Java NIO Channel to Channel Transfers》
FileChannel 的 transferFrom 和 transferTo 方法可以方便地将数据传入 FileChannel(写文件)或 读取 FileChannel 中的数据(读文件)
这两个方法比简单的 循环 读取-写入 更高效。因为许多操作系统能直接将 源Channel 中的数据传输到 文件系统缓存中,而无需真正地复制这些数据。
transferFrom
该方法可以读取一个 ReadableByteChannel 中的数据,并传入 FileChannel。
FileChanne ...
原文:《Java NIO Scatter / Gather》
Scatter(分散):将一个 Channel 中的数据读取到多个 Buffer 中。
Gather(聚集):将多个 Buffer 中的数据写入一个 Channel 中。
Scatter/Gather 机制可以方便处理多个分开的数据块。如,一条消息由消 ...