Java BIO基本介绍

news2024/11/24 17:22:41

Java BIO基本介绍

  • Java BIO基本介绍
    • 工作原理
    • BIO传统通讯实现
        • 总结
    • BIO实现多发和多收
        • 结果:

Java BIO基本介绍

  • 📜Java BIO就是传统的java io 编程,其相关的类和接口在java.io
  • 📜Blo(blockingl/O):同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)

工作原理

🌟服务端
1、通过serversoket注册端口
2、服务端调用accpect方法用于监听客户端的socket请求
3、从socket中获取字节输入或输出流进行数据的读写操作

🌟客户端
1、通过socket对象与服务端连接
2、从socket中得到字节输入或者输出流进行读写操作

在这里插入图片描述

BIO传统通讯实现

服务端

  //服务端
    public static void main(String[] args) {
        try {
            //定义ServerSocket进行端口注册
            ServerSocket socket = new ServerSocket(8686);
            //监听客户端的Socket请求
            Socket st = socket.accept();
            //获取Socket请求中的字节输入流对象
            InputStream is = st.getInputStream();
            //把字节输入流包装成缓冲字符输入流
            BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
            String msg;
            if ((msg = bfr.readLine())!=null){
                System.out.println("服务端接收到的信息"+ msg);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

客户端

    //客户端
    public static void main(String[] args) {
        try {
            //创建Socket对象请求服务器连接
            Socket socket = new Socket("127.0.0.1",8686);
            //从Socket中获取字节流
            OutputStream os = socket.getOutputStream();
            //把字节输出流包装成一个打印流
            PrintStream ps = new PrintStream(os);
            ps.println("hello word!!! ");
            ps.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

总结

  • 🔔在以上通信中,服务端会一致等待客户端的消息,如果客户端没有进行消息的发送,服务端将一直进入阻塞状态。
  • 🔔同时服务端是按照行获取消息的,这意味着客户端也必须按照行进行消息的发送,否则服务端将进入等待消息的阻塞状态!

BIO实现多发和多收

思想:通过while函数实现客户端一直发送消息往服务端,服务端一直接接收消息并输出,实现多发和多收的机制

客户端

//客户端
    public static void main(String[] args) {
        try {
            //创建Socket对象请求服务器连接
            Socket socket = new Socket("127.0.0.1",8686);
            //从Socket中获取字节流
            OutputStream os = socket.getOutputStream();
            //把字节输出流包装成一个打印流
            PrintStream ps = new PrintStream(os);
            Scanner sc =  new Scanner(System.in);
            while (true){
                System.out.print("请说");
                String msg = sc.nextLine();
                ps.println(msg);
                ps.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

服务端

//服务端
    public static void main(String[] args) {
        try {
            //定义ServerSocket进行端口注册
            ServerSocket socket = new ServerSocket(8686);
            //监听客户端的Socket请求
            Socket st = socket.accept();
            //获取Socket请求中的字节输入流对象
            InputStream is = st.getInputStream();
            //把字节输入流包装成缓冲字符输入流
            BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
            String msg;
            while ((msg = bfr.readLine())!=null){
                System.out.println("服务端接收到的信息"+ msg);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

结果:

实现了客户端每发一条消息,服务端就即使接收并打印出来

服务端 | 客户端

Alt Alt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java本地搭建宝塔部署实战springboot仓库管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的springboot仓库管理系统源码。 技术架构 技术框架:jdk8 jQuery MySQL5.7 mybatisplus layui shiro运行环境:jdk8 IntelliJ IDEA maven3 宝塔面板 本…

云计算HCIA学习笔记-云计算基础概念

第1章 云计算基础概念 1.1 云计算课程安排说明 (IA-虚拟化-FC / IP-Linux OpenStack 桌面云/IE-备份容灾迁移) 1.2 为什么云计算IA讲虚拟化? 提前告知学员,为什么IA课程要重点讲解虚拟化?云计算基于OpenStack&…

c++多线程(一)线程管理

来源:微信公众号「编程学习基地」 文章目录1.启动线程2.等待线程完成2.1特殊情况下的等待2.2使用RAII等待线程完成2.3后台运行线程2.4量产线程,等待结束2.传递参数3.转移线程所有权4.运行时决定线程数量2.5 识别线程1.启动线程 当把函数对象传入到线程…

G1D15-fraud-APT-汇报-基础模型与LR相关内容总结-KG-cs224w colab1-ctf rce41-44

一、fraud 跑了一个lr模型,从正则,一直看到了极大似然和最大后验估计emmm。一路跑偏,已经0954了。先把实验结果抄一抄 本来想把模型都跑完,没想到看R补充了大量的基本知识(L1\L2正则、先验概率 今天先来看fraud 看的…

Hive——详细总结Hive中各大查询语法

✅作者简介:最近接触到大数据方向的程序员,刚入行的小白一枚 🍊作者博客主页:皮皮皮皮皮皮皮卡乒的博客 🍋当前专栏:Hive学习进阶之旅 🍒研究方向:大数据方向,数据汇聚&a…

单隐层神经网络在Matlab上实现及其简单应用

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

Kafka 认证三:添加 Kerberos 认证详细流程

背景 上一章节介绍了 Kerberos 服务端和客户端的部署过程,本章节继续介绍 Kafka 添加 Kerberos 认证的部署流程,及 Java API 操作的注意事项。 sasl.kerberos.service.name 配置的含义 Kafka 添加 Kerberos 部署的核心是 Kafka 服务端的 Principal 配…

基于gensim实现word2vec模型(附案例实战)

目录 什么是word2vec? Word2Vec的原理 gensim实现word2vec模型(实战) 什么是word2vec? Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的…

20+个很棒的 Python 脚本的集合(迷你项目)

💂 个人网站:【海拥】【摸鱼小游戏】【神级源码资源网站】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且实用的 前…

【软件分析第17讲-学习笔记】程序综合 Program Synthesis

文章目录前言正文程序综合枚举法CEGIS:基于反例的优化约束求解法启发式搜索法统计法基于组件的程序综合 Component-Based Synthesis小结参考文献前言 创作开始时间: 如题,学习一下程序综合 Program Synthesis的相关知识。参考:熊…

AUTOSAR-Fee模块

(73条消息) AUTOSAR-Fee模块_一ye残雪的博客-CSDN博客_fee 配置 0 前言 Fee模块全称Flash EEPROM Emulation Module,属于ECU抽象层 Fee模块本身是脱离硬件的,但是Fee模块可能会引用的Fls模块定制API,所以只能算半抽象 本文中,由于…

数据库高级 III

数据库高级 III 二叉排序树在极端情况下存在的问题 二叉排序树在极端情况下会产生失衡二叉树 失衡二叉树其实是不希望存在的,因为它失去了二叉排序树的查询优势,现在这种失衡二叉树的查询效率和单向链表一样,此时它就是单向链表 数据结构…

14.4、SpringWebFlux-1

14.4、SpringWebFlux-1 14.4.1、前置知识 SpringMVC,SpringBoot,Maven,Java8 新特性 14.4.2、基本介绍 官方文档 Web on Reactive Stack (spring.io) 是 Spring5 添加新的模块,用于 web 开发的,功能 SpringMVC 类…

网络热传App鉴定 |「得物」疑私删用户视频?从技术角度还原事件始末

声明:本文更注重于原理知识的普及,因此文中不会有大量实际代码的展示,如果想从代码层面上了解「应用存储分区」的内容,欢迎阅读我两年前写过的技术文章《Android 10 应用分区存储适配实践》 近日,有网友爆料&#xff0…

MySQL 分库分表

MySQL分库分表 概念 读写分离优化了互联网读多写少场景下的性能问题,考虑一个业务场景,如果读库的数据规模非常大,除了增加多个从库之外,还有其他的手段吗?实现数据库高可用,还有另外一个撒手锏&#xff…

Python性能优化指南--让你的Python代码快x3倍的秘诀

Python性能优化指南 Python最为人诟病的就是其执行速度。如何让Python程序跑得更快一直是Python核心团队和社区努力的方向。作为Python开发者,我们同样可以采用某些原则和技巧,写出性能更好的Python代码。本文将带大家深入探讨Python程序性能优化方法。…

99页4万字XX大数据湖项目建设方案

目 录 1. 项目综述 1.1. 项目背景 1.2. 项目目标 1.3. 项目建设路线 2 需求分析 2.1功能需求 2.1.1 统一数据接入 2.1.2 数据迁移 2.1.3 数据范围与ETL 2.1.4 报表平台 2.1.5 安全管理 2.1.6 数据治理 2.2非功能需求 2.2.1运维保障需求 2.2.2可用性需求 2.2.3可…

MQTT 具备那些特征?

目录 1、MQTT 中的 QoS(消息服务质量) (1)为什么服务质量(QoS)很重要? (2)QoS 在 MQTT 中是如何工作的? (3)如何选择正确的 QoS 级别 (4&a…

Java开发中Word转PDF文件5种方案横向评测

Java开发中Word转PDF文件5种方案横向评测 前段时间接了个项目,需要各种处理Word模板、转PDF、签章等等,非常头疼,其中光是一个word转PDF就折磨我好久,实现转换很简单,但是效果总是达不到满意,于是我把市面…

【Linux】关于普通用户无法使用sudo指令的解决方案

文章目录前言解决方案结语前言 在这篇博客中,测试 rm -rf 删除文件时无视权限暴力删除的效果时,使用了 sudo 指令。 但是sudo指令是不能直接使用的,需要修改一些设置。 当时我遇到这个问题时,困惑了许久,查找解决方…