草庐IT

IO、NIO、BIO傻傻分不清吗,让我对象告诉你~~

1、Stream与Channelstream不会自动缓冲数据,channel会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream仅支持阻塞API,channel同时支持阻塞、非阻塞API,网络channel可配合selector实现多路复用二者均为全双工,即读写可以同时进行虽然Stream是单向流动的,但是它也是全双工的2、IO模型同步:线程自己去获取结果(一个线程)例如:线程调用一个方法后,需要等待方法返回结果异步:线程自己不去获取结果,而是由其它线程返回结果(至少两个线程)例如:线程A调用一个方法后,继续向下运行,运行结果由线程B返回当调用一次channel.read或strea

IO、NIO、BIO傻傻分不清吗,让我对象告诉你~~

1、Stream与Channelstream不会自动缓冲数据,channel会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream仅支持阻塞API,channel同时支持阻塞、非阻塞API,网络channel可配合selector实现多路复用二者均为全双工,即读写可以同时进行虽然Stream是单向流动的,但是它也是全双工的2、IO模型同步:线程自己去获取结果(一个线程)例如:线程调用一个方法后,需要等待方法返回结果异步:线程自己不去获取结果,而是由其它线程返回结果(至少两个线程)例如:线程A调用一个方法后,继续向下运行,运行结果由线程B返回当调用一次channel.read或strea

Netty(1)——NIO基础

本篇主要介绍JavaNIO的基本原理和主要组件Netty是由JBOSS提供的Java开源网络应用程序框架,其底层是基于Java提供的NIO能力实现的。因此为了掌握Netty的底层原理,需要首先了解JavaNIO的原理。NIO简介计算机主要由CPU、内存、外存、IO设备等硬件组成,计算机执行计算的过程就是CPU从内存中获取数据,进行计算,然后再将计算结果写入内存中。但由于内存非常昂贵且下电后数据会丢失,计算机需要使用外存来持久化存储大规模的数据,外存提供了大量的存储空间,代价是其存取速度远小于内存。除了读取外存数据,计算机还可以从网络设备获取网络中的数据,受网络传输速度的限制,计算机获取网络数据

Netty(1)——NIO基础

本篇主要介绍JavaNIO的基本原理和主要组件Netty是由JBOSS提供的Java开源网络应用程序框架,其底层是基于Java提供的NIO能力实现的。因此为了掌握Netty的底层原理,需要首先了解JavaNIO的原理。NIO简介计算机主要由CPU、内存、外存、IO设备等硬件组成,计算机执行计算的过程就是CPU从内存中获取数据,进行计算,然后再将计算结果写入内存中。但由于内存非常昂贵且下电后数据会丢失,计算机需要使用外存来持久化存储大规模的数据,外存提供了大量的存储空间,代价是其存取速度远小于内存。除了读取外存数据,计算机还可以从网络设备获取网络中的数据,受网络传输速度的限制,计算机获取网络数据

Netty基础-NIO(二)

前置文章:Netty基础-NIO(一),该文主要引入NIO三大组件,介绍了Buffer结构,及Buffer具体使用。零、本文纲要一、ChannelFileChannelFileChannel传输二、补充:Path&Paths&Files类Path&PathsFilesFiles类的walkFileTree方法&walk方法一、Channel1.FileChannel注意:FileChannel只能工作在阻塞模式下①获取方式FileInputStream→只读;FileOutputStream→只写;RandomAccessFile→读写;FileChannelreadChannel=newFi

Netty基础-NIO(二)

前置文章:Netty基础-NIO(一),该文主要引入NIO三大组件,介绍了Buffer结构,及Buffer具体使用。零、本文纲要一、ChannelFileChannelFileChannel传输二、补充:Path&Paths&Files类Path&PathsFilesFiles类的walkFileTree方法&walk方法一、Channel1.FileChannel注意:FileChannel只能工作在阻塞模式下①获取方式FileInputStream→只读;FileOutputStream→只写;RandomAccessFile→读写;FileChannelreadChannel=newFi

NIO 实现非阻塞 Socket 通讯,NIO 实现多人聊天室的案例

NIO实现多人聊天室的案例服务端importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.*;importjava.nio.charset.Charset;/***聊天室服务端*/publicclassNServer{privateSelectorselector=null;staticfinalintPORT=30000;privateCharsetcharset=Charset.forName("UTF-8");ServerSock

NIO 实现非阻塞 Socket 通讯,NIO 实现多人聊天室的案例

NIO实现多人聊天室的案例服务端importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.*;importjava.nio.charset.Charset;/***聊天室服务端*/publicclassNServer{privateSelectorselector=null;staticfinalintPORT=30000;privateCharsetcharset=Charset.forName("UTF-8");ServerSock

NIO 缓冲区

摘要    Java提供了NIO操作的API,但真正处理NIO流,经常会出现如下代码:SocketChannelchannel=(SocketChannel)key.channel();ByteBufferbuffer=ByteBuffer.allocate(1024);while(channel.read(buffer)!=-1){//复位,转化为读模式buffer.flip();while(buffer.hasRemaining()){System.out.println("收到客户端"+channel.socket().getPort()+"的信息:"+StandardCharsets.

NIO 缓冲区

摘要    Java提供了NIO操作的API,但真正处理NIO流,经常会出现如下代码:SocketChannelchannel=(SocketChannel)key.channel();ByteBufferbuffer=ByteBuffer.allocate(1024);while(channel.read(buffer)!=-1){//复位,转化为读模式buffer.flip();while(buffer.hasRemaining()){System.out.println("收到客户端"+channel.socket().getPort()+"的信息:"+StandardCharsets.