TCP BIO 背景 网络编程的基本模型是Clien/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过socket进行通信.socket相当于通信的媒介,用来传输数据. Java处理TCP的类主要有Socket和ServerSocket,基于传统同步阻塞模型(Blocking IO)开发中,ServerSocket负责绑定IP地址,启动监听…
在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的IO,也就是阻塞式输入输出(Blocking I/O, BIO),在JDK1.4之后出现了新的输入输出API——NIO(New I/O或Non-blocking I/O),也就是同步非阻塞式输入输出,再到后面随着NIO的发展出现了新的异步非阻塞式的输入输出——AIO. 本文将对BIO,即阻塞式输入输出的字节流以…
在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的IO,也就是阻塞式输入输出(Blocking I/O, BIO),在JDK1.4之后出现了新的输入输出API——NIO(New I/O或Non-blocking I/O),也就是同步非阻塞式输入输出,再到后面随着NIO的发展出现了新的异步非阻塞式的输入输出——AIO. 本文将对BIO,即阻塞式输入输出的字节流以…
在上篇<Java IO(2)阻塞式输入输出(BIO)>的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解.现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端”来讲,服务器端需要阻塞式接收客户端的请求,这里的阻塞式表示服务器端的应用代码会被挂起直到客户端有请求过来,在高并发的应用场景有多个客户端发起连接下非阻塞式IO(NIO)是不二之选(且只需要在服务器端使用1个线程来管理,并不需要多个线程来处理多个连接).在现实情况下,Tomcat.Jetty等很多Web服务器…
作者:Grey 原文地址: Java IO学习笔记五:BIO到NIO 准备环境 准备一个CentOS7的Linux实例: 实例的IP: 192.168.205.138 我们这次实验的目的就是直观感受一下Socket编程中BIO模型和NIO模型的性能差异 BIO 准备服务端代码: import java.io.*; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; /**…
本文会尝试介绍Java中BIO与NIO的范例与原理 使用的模型非常简单:服务器--客户端模型,服务器会将客户端发送的字符串原样发回来.也就是所谓的echo server. BIO 也就是所谓的Socket通信,直接上代码了 public class BioServer { public void go(int port) { try (ServerSocket server = new ServerSocket(port)) { while (true) { final Socket socke…
近段时间开始学习<Unix网络编程>,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述字可读时,select成果返回并告诉我对应套接口已可读,此时采用阻塞式read或非阻塞式read去读套接口有何区别,既然已经告诉套接字可读,调用read怎么还会发生阻塞.即本问题,为什么IO多路复用需要采用非阻塞式IO. 当时理解不深,不知道该问题存在原因,第二天偶然刷知乎,刷到了这个问题.现解释如下: 1.…
原文链接:如何解读 Java IO.NIO 中的同步阻塞与同步非阻塞? 一.前言 最近刚读完一本书:<Netty.Zookeeper.Redis 并发实战>,个人觉得 Netty 部分是写得很不错的,读完之后又对 Netty 进行了一波很好的复习(之前用 spring boot + netty + zookeeper 模仿 dubbo 做 rpc 框架,那时候是刚学 netty 后自己造的小轮子). 虽然对于 Netty 的使用已经比较熟悉了,而且还知道它的底层是基于 Java NIO 做进一…
字节流是由字节组成的;字符流是由字符组成的Java里字符由两个字节组成. 1字符=2字节JAVA中的字节流是采用ASCII编码的,字符流是采用好似UTF编码,支持中文的 Java IO流处理 面试题汇总   说明:本节内容来源于网络汇总 输入输出流是相对于内存而言的! 1.面试题汇总 (1)java中有几种类型的流? 字符流和字节流.字节流继承inputStream和OutputStream,字符流继承自InputSteamReader和OutputStreamWriter. (2)谈谈Java…
本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用到一个计算结果的工具类,见文章代码部分. 相关的基础知识文章推荐: Linux 网络 I/O 模型简介(图文) Java 并发(多线程) 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间的通信. 服务端提供I…