java
文章平均质量分 53
mylife512
万般皆苦,只可自渡
展开
-
Socket NIO原理和实现
使用传统的I/O程序读取文件内容, 并写入到另一个文件(或Socket), 如下程序:会有较大的性能开销, 主要表现在一下两方面:1. 上下文切换(context switch), 此处有4次用户态和内核态的切换2. Buffer内存开销, 一个是应用程序buffer, 另一个是系统读取buffer以及socket buffer其运行示意图如下 1) 先将文件内容从磁盘中拷贝到操作系统buffer2) 再从操作系统buffer拷贝到程序应用buffer3) 从程序buffer拷贝到sock原创 2022-06-28 13:15:45 · 213 阅读 · 0 评论 -
Java NIO SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:关闭 SocketChannel当用完SocketChannel之后调用SocketChannel.close()关闭Socke原创 2022-06-26 11:36:30 · 443 阅读 · 0 评论 -
Java NIO ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:打开 ServerSocketChannel通过调用 ServerSocketChannel.open() 方法来打开ServerSocketChannel.如:关闭 ServerSocketChannel通过调用ServerSocketChan原创 2022-06-21 09:41:49 · 187 阅读 · 0 评论 -
Java NIO Selector(三)
通过Selector选择通道一旦向Selector注册了一或多个通道,就可以调用几个重载的select()方法。这些方法返回你所感兴趣的事件(如连接、接受、读或写)已经准备就绪的那些通道。换句话说,如果你对“读就绪”的通道感兴趣,select()方法会返回读事件已经就绪的那些通道。下面是select()方法:select()阻塞到至少有一个通道在你注册的事件上就绪了。select(long timeout)和select()一样,除了最长会阻塞timeout毫秒(参数)。selectNow()原创 2022-06-21 09:38:37 · 152 阅读 · 0 评论 -
Java NIO Selector(二)
在上一小节中,当向Selector注册Channel时,register()方法会返回一个SelectionKey对象。这个对象包含了一些你感兴趣的属性:下面我会描述这些属性。interest集合就像向Selector注册通道一节中所描述的,interest集合是你所选择的感兴趣的事件集合。可以通过SelectionKey读写interest集合,像这样:可以看到,用“位与”操作interest 集合和给定的SelectionKey常量,可以确定某个确定的事件是否在interest 集合中。ready原创 2022-06-20 09:53:55 · 91 阅读 · 0 评论 -
Java NIO Selector(一)
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。为什么使用Selector?仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都要占用系统的一些资源(如内存)。因此,使用的线程越少越好。但是,需要记住,现代的操作系统和CPU在多任务方面原创 2022-06-20 09:51:32 · 386 阅读 · 0 评论 -
Java NIO Scatter Gather
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel中读取或者写入到Channel的操作。分散(scatter):从Channel中读操作时,将读取的数据写入多个buffer中。聚集(gather):向Channel中写操作时,将多个buffer的数据写入同一个Channel。scatter / gather经常用于需要将传输的数据分开处理的场合,例如传输一个由消息头和消息体组成的消息,你可能会将消息体和消息头分散到不同的buffer中,这样你可以方便原创 2022-06-18 21:12:30 · 96 阅读 · 0 评论 -
Java NIO Pipe
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:通过Pipe.open()方法打开管道。例如:向管道写数据要向管道写数据,需要访问sink通道。像这样:通过调用SinkChannel的write()方法,将数据写入SinkChannel,像这样:从管道读取数据从读取管道的数据,需要访问source通道,像这样:调用source通道的read()方法原创 2022-06-18 21:09:30 · 112 阅读 · 0 评论 -
Java NIO Java NIO DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:这个例子打开的 DatagramChannel可以在UDP端口9999上接收数据包。接收数据通过receive()方法从DatagramChannel接收数据,如:receive()方法会将接收到的数据包内容复制到指定的Buffer. 如果Buf原创 2022-06-17 10:03:12 · 212 阅读 · 0 评论 -
Java NIO FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。下面是通过RandomAccessFile打开FileChannel的示例:从File原创 2022-06-17 09:59:46 · 235 阅读 · 0 评论 -
Java NIO Channel
Java NIO的通道类似流,但又有些不同:正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现: FileChannel 从文件中读写数据。 DatagramChannel 能通过UDP读写网络中的数据。 SocketChannel 能通过TCP读写网络中的数据。 ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketCha原创 2022-06-16 13:26:53 · 69 阅读 · 0 评论 -
Java NIO transfer 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。transferFrom()可以将数据从源通道传输到FileChannel中,下面是一个简单的例子:1、方法的输入参数position表示从position处开始向目标文件写入数据2、count表示最多传输的字节数。3、如果源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数。4、此外要注意,在SoketChannel的实现中,SocketCh原创 2022-06-16 13:23:39 · 293 阅读 · 0 评论 -
中文分词之Java实现使用IK Analyzer实现
IK Analyzer是基于lucene实现的分词开源框架,下载路径:http://code.google.com/p/ik-analyzer/downloads/list需要在项目中引入:IKAnalyzer.cfg.xmlIKAnalyzer2012.jarlucene-core-3.6.0.jarstopword.dic运行后结果:基于|java|语言|开发|的|轻量级|的|中文|分词|工具包|使用(lucene)实现:...原创 2022-06-06 11:11:53 · 570 阅读 · 0 评论 -
java代码实现ip ping功能
java代码实现ip ping功能:public static void main(String[] args) throws UnknownHostException { System.out.println(InetAddress.getLocalHost().toString().split("/")[1]);//获取local IP Runtime runtime =Runtime.getRuntime(); // 获取当前程序的运行进对象 Process process = null原创 2022-05-13 14:08:56 · 898 阅读 · 0 评论 -
dom4j解析xml为JavaBean(及反向)
import java.io.File;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Demo { public static void main(String[] args) throws Exception { SAXReader sr = n.原创 2022-05-13 14:04:26 · 227 阅读 · 0 评论 -
Gradle开发环境配置
最近公司有个外包项目需要接回来维护,需要gradle才能跑起来,之前一直用的是maven构建项目,便摸索着将项目环境构建完成:1、首先确定本地 Java 环境装好,然后下载去官网下载gradle软件选择对应版本Gradle Distributions,这里下载的是 gradle-4.8-all.zip;2、配置环境变量新增环境变量 GRADLE_HOME,指向 gradle 的解压的路径,然后 path 环境变量里面加上%GRADLE_HOME%\bin;3、如果要像 MAVEN 一样在 s..原创 2022-03-01 12:00:24 · 8084 阅读 · 0 评论 -
Linux使用jstat命令查看jvm的GC情况
jstat命令命令格式:jstat [Options] vmid [interval] [count]参数说明:Options,选项,我们一般使用 -gcutil 查看gc情况vmid,VM的进程号,即当前运行的java进程号interval,间隔时间,单位为秒或者毫秒count,打印次数,如果缺省则打印无数次示例说明示例通常运行命令如下:jstat -gc 27511 5000即会每5秒一次显示进程号为27511的java进成的GC情况,显示内容如下图:原创 2022-01-18 11:53:37 · 863 阅读 · 0 评论 -
fastDFS安装文档
一、配置安装环境1.解压缩libevent-1.4.14b-stable.tar.gz 并且重命名为libevent./configure --prefix=/usr/local/libeventmakesu - rootmake installln -s /usr/local/libevent/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.52.解压缩pcre-8.20.tar.gz 并重命名为pcre./config原创 2022-01-17 01:32:05 · 1891 阅读 · 0 评论