zoukankan      html  css  js  c++  java
  • IO操作-BIO

    BIO:block IO,即同步阻塞IO,主要应用于文件 IO 和网络 IO

    这里主要说一下网络IO,以Socket编程为例进行说明

    1、先建立Socket服务端

     1 //BIO 服务器端程序
     2 public class TCPServer {
     3     public static void main(String[] args) throws Exception {
     4         //1.创建ServerSocket对象
     5         ServerSocket ss=new ServerSocket(9999); //端口号
     6 
     7         while (true) {
     8             //2.监听客户端
     9             Socket s = ss.accept(); //阻塞
    10             //3.从连接中取出输入流来接收消息
    11             InputStream is = s.getInputStream(); //阻塞
    12             byte[] b = new byte[10];
    13             is.read(b);
    14             String clientIP = s.getInetAddress().getHostAddress();
    15             System.out.println(clientIP + "说:" + new String(b).trim());
    16             //4.从连接中取出输出流并回话
    17             //OutputStream os = s.getOutputStream();
    18             //os.write("服务端内容".getBytes());
    19             //5.关闭
    20             //s.close();
    21         }
    22     }
    23 }

    2、建立Socket客户端

    //BIO 客户端程序
    public class TCPClient {
        public static void main(String[] args) throws Exception {
            while (true) {
                //1.创建Socket对象
                Socket s = new Socket("127.0.0.1", 9999);
                //2.从连接中取出输出流并发消息
                OutputStream os = s.getOutputStream();
                System.out.println("请输入:");
                Scanner sc = new Scanner(System.in);
                String msg = sc.nextLine();
                os.write(msg.getBytes());
                //3.从连接中取出输入流并接收回话
                InputStream is = s.getInputStream(); //阻塞
                byte[] b = new byte[20];
                is.read(b);
                System.out.println("服务端说:" + new String(b).trim());
                //4.关闭
                s.close();
            }
        }
    }

    从代码中可以清晰的看到,阻塞的地方总共有3处

    1、在服务端accept的时候,服务端是处于阻塞阶段,如果没有客户端进行连接的时候,服务端会一直阻塞在那里

    2、在服务端getInputStream的时候,如果客户端没有发送内容,服务端也会一直阻塞在这里

    3、在客户端getInputStream的时候,如果服务端没有发送内容,客户端也会一直阻塞在这里

    因此在高并发多线程的程序中BIO操作IO效率就会显得捉襟见肘,在下一篇文章中,博主会把相对应用比较多的NIO进行阐述

  • 相关阅读:
    Struts2标签库
    ognl表达式
    Struts2拦截器
    Struts2文件上传与下载
    Swoft2.x 小白学习笔记 (四) --- RPC
    Swoft2.x 小白学习笔记 (三) --- Task、协程
    Swoft2.x 小白学习笔记 (二) --- mysql、redis
    Swoft2.x 小白学习笔记 (一) ---控制器
    Tornado WebSocket简单聊天
    用python实现的21点游戏
  • 原文地址:https://www.cnblogs.com/baixiaoguang/p/11937400.html
Copyright © 2011-2022 走看看