`
文章列表
原文:《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 机制可以方便处理多个分开的数据块。如,一条消息由消 ...
Global site tag (gtag.js) - Google Analytics