03.Netty入门Demo

[TOC]一、目标开发一个简单的服务器端和客户端客户端向服务器端发送 hello, world服务器仅接收,不返回引入依赖<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1...

Java 2022-06-07 PM 220次 0条

18.NIO之零拷贝

[TOC]一、传统IO问题传统的 IO 将一个文件通过 socket 写出File f = new File("helloword/data.txt"); RandomAccessFile file = new RandomAccessFile(file, "r"); byte[] buf = new byte[(int)f.length()]; f...

Java 2022-06-05 AM 215次 0条

17.NIO之IO模型

[TOC]一、IO流程就是对于 Linux 系统, I/O 操作不是一步完成的。此处的 I/O 操作是一个通用型的概念,对于 socket 通信,也可以看作一个 I/O 操作过程,只不过操作的是网络对象。I/O 操作一般分为两个部分:应用程序发起 I/O 操作请求,等待数据,或者将要操作的数据拷贝到系统内核中(比如 socket)。系统内核进行 I/O 操作(一般是内核将数据拷贝到用户进程中...

Java 2022-06-05 AM 235次 0条

16.NIO之多线程优化

[TOC]前言之前说到的服务端程序都是在一个线程上进行的,这个线程不仅负责连接客户端发来的请求,同时还要处理读写事件,这样效率还是不够高。如今电脑都是多核处理器,这意味着可以同时进行多个线程,所以服务端应该充分利用这一点。一、概述服务端线程可以建立多个线程,将这些线程分成两组:单线程配一个选择器(Boss),专门处理 accept 事件创建 cpu 核心数的线程(Worker),每个线程配一...

Java 2022-06-04 PM 215次 0条

15.NIO Selector之处理write事件

一次无法写完例子非阻塞模式下,无法保证把 buffer 中所有数据都写入 channel,因此需要追踪 write 方法的返回值(代表实际写入字节数)用 selector 监听所有 channel 的可写事件,每个 channel 都需要一个 key 来跟踪 buffer,但这样又会导致占用内存过多,就有两阶段策略当消息处理器第一次写入消息时,才将 channel 注册到 selector ...

Java 2022-06-03 PM 233次 0条

14.NIO消息边界问题处理

[TOC]一、消息边界问题的产生1.1 服务端代码import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import ...

Java 2022-06-03 PM 232次 0条

13.Selector处理accept和read事件

[TOC]前言多路复用单线程可以配合 Selector 完成对多个 Channel 可读写事件的监控,这称之为多路复用多路复用仅针对网络 IO、普通文件 IO 没法利用多路复用如果不用 Selector 的非阻塞模式,线程大部分时间都在做无用功,而 Selector 能够保证有可连接事件时才去连接有可读事件才去读取有可写事件才去写入限于网络传输能力,Channel 未必时时可写,一旦 Cha...

Java 2022-06-02 PM 251次 0条

11.NIO之阻塞模式和非阻塞模式

[TOC]前言SocketChannel方法介绍创建一个服务器对象ServerSocketChannel.open()服务器对象需要绑定ip和端口,使用bind(InetSocketAddress )方法,需要使用传入InetSocketAddress,只需传入一个端口号即可;服务器调用accept()方法获取客户端的连接请求;通过接收到的客户端连接对象read(buffer)方法获取客户端...

Java 2022-05-31 PM 267次 0条

10.NIO之Files Demo

[TOC]一、遍历目录文件import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.concurrent.atomic.AtomicInteger; /** * @author lilinchao * @...

Java 2022-05-30 PM 246次 0条

09.NIO之Files介绍

[TOC]一、概述Files是Java1.7 在nio中新增的专门用于处理文件和目录的工具类。Files和Path配合可以很方便的完成对文件/目录的创建、读取、修改、删除等操作。二、常用方法介绍2.1 Files.exits()boolean exists(Path path, LinkOption... options)描述:方法检查一个路径是否存在于当前的文件系统中。参数:Path :传...

Java 2022-05-30 PM 248次 0条