BIO/NIO学习

在传送文件的时候常常出现这么一个问题,就是当客户端的文件全部传送完了之后,服务器没有接收到客户端那边传过的停止信号,所以服务器也就跟着客户端停止运行了,我们可以使用

  try {socket.shutdownOutput();} catch (IOException e) {throw new RuntimeException(e);}

这么一段代码使客户端的soket连接中断,这样就告诉了服务器那边 客户端已经运行完了

 

这三个输入流在 Java 中都用于从各种源(如文件、网络、内存等)中读取数据,但它们之间有一些区别:

  1. InputStream 是所有字节输入流的抽象类,它是字节输入流的基类。它提供了读取字节的基本方法,但是不能直接处理字符数据。

  2. InputStreamReader 是字节流到字符流的桥梁。它将字节流转换为字符流,可以指定编码方式,方便地读取字符数据。

  3. BufferedInputStream 是对输入流的缓冲,它实际上是一个装饰器模式的应用,用于提高输入流的读取效率。它通过在内存中建立一个缓冲区,减少了对磁盘的访问次数,提高了读取性能。

总结来说,InputStream 是字节输入流的抽象类,InputStreamReader 用于将字节流转换为字符流,而 BufferedInputStream 则是对输入流的缓冲,用于提高读取性能。

Buffer的主要作就是装入数据,然后输出数据,相当于一个竹筒,通过put方法放入数据,没放一些数据 Nuffer的position相应的就会向后移动一些位置。
  当Buffer装入这些数据结束后,条用Buffer的flip()方法,该方法将limit设置为position所在位置,评奖position设为0,这就是的Buffer的读写指针又移到了开始的位置,也就是卓,Buffer调用flip()方法之后,BUffer为输出数据做好准备,当Buffer输出数据结束之后,Buffer调用clear方法,clear()不是将Buffer里面的数据清空,它仅仅只是将position的位置设置为0,后面的数据会将position后面的数据覆盖,将limit设置为capacity,这样就为后面再一次装入数据做好准备

Buffer的样子

在这里需要区分rewind和flip方法

flip()rewind() 是 ByteBuffer 类中的两个重要方法,它们都用于在读写操作之间调整缓冲区的位置和限制。

  1. flip() 方法:

    • flip() 方法的作用是将缓冲区从写模式切换到读模式。在写模式下,通过 put() 方法向缓冲区写入数据时,position 会逐渐增加,limit 则保持不变。而在读模式下,准备从缓冲区中读取数据时,需要将 position 设置为 0,同时将 limit 设置为之前的 position,以限制读取的数据范围。
    • 具体来说,flip() 方法会将 limit 设置为当前 position,然后将 position 设置为 0,这样就完成了从写模式到读模式的切换
  2. rewind() 方法:

    • rewind() 方法的作用是将 position 设置为 0,以便重新读取缓冲区中的数据,而不影响 limit 的值。这意味着可以重复读取缓冲区中的数据,而不必改变 limit 的设定。
    • 通常情况下,rewind() 方法用于在再次读取先前写入的数据之前,将 position 设置为 0。

Channel可以直接将指定文件的部分或者全部直接映射成Buffer

文件在计算机中实际上是存储在磁盘上的,但在程序运行时,文件内容会被读取到计算机的内存中进行处理。当你打开一个文件时,操作系统会将文件的内容加载到内存中,以便程序可以直接从内存中读取和操作文件数据。

当你使用传统的文件 I/O 操作(比如使用InputStream和OutputStream)时,需要显式地将文件内容从磁盘读取到内存中,并且在写入文件时也需要将数据从内存写回到磁盘。这个过程涉及了磁盘 I/O 操作,而磁盘访问通常比内存访问要慢得多。

而通过NIO中的文件映射(FileChannel.map()方法),可以直接将文件的部分或全部内容映射到内存中的ByteBuffer中,从而实现基于内存的文件读写操作。这样可以避免传统的文件I/O操作,提高了文件I/O操作的性能和灵活性。

因此,无论是传统的文件 I/O 操作还是NIO中的文件映射,文件内容都会被加载到计算机的内存中进行处理。

非阻塞的NIO连接方式差不多是这个样子

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

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

相关文章

web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite

MENU 静态资源与打包规则动态访问静态资源直接导入将静态资存放在public目录中动态导入URL构造函数结束语实践与坑附文 静态资源与打包规则 介绍 Vite脚手架在打包代码的时候,会把源代码里对于静态资源的访问路径转换为打包后静态资源文件的路径。主要的区别是文件指…

记录一次开源 MaxKey 安装部署

官方文档:https://www.maxkey.top/doc/docs/intro/ 开源代码:https://toscode.mulanos.cn/dromara/MaxKey 发行版:https://toscode.mulanos.cn/dromara/MaxKey/releases 一、准备工作 yum install -y yum-utils yum-config-manager --add-r…

SwiftUI初探

SwiftUI 虽然出现了好几年(1.0好像2019年出的,还有SPM也是同一年),现在已经到从1.0到5.0,但受限于对系统的要求(最低iOS13.0,有的要求17.0及以上),每个版本里面差异也很大,语法和Flutter 的Dart 比较像。空闲之余可以先…

5、sqlmap注入post类型+os-shell

题目:青少年:Easy_SQLi 1、打开网页,是一个登入表单 2、判断注入类型,是一个字符注入,使用or直接绕过密码进去了 3、上bp抓取数据包,sqlmmap用post注入走一遍,找到数据库,账号密码&…

如何制定一个有效的现货黄金投资策略(EEtrade)

制定一个有效的现货黄金投资策略涉及多方面的考量。以下是几个步骤和考虑因素,可以帮助您建立一个坚实的投资策略: 1. 设立清晰的投资目标 决定您投资现货黄金的主要目的。是否是为了短期利润,长期保值增值,还是为了投资组合的多…

N的阶乘(高精度)

目录 题目描述 输入格式 输出格式 样例输入 样例输出 思路 参考代码 题目描述 输入正整数n,输出n! 输入格式 一个正整数n,n 3000 输出格式 输出n! 样例输入 3 样例输出 9 思路 主要就是高精度乘法的模版&#x…

Python中Web开发-Django框架

大家好,本文将带领大家进入 Django 的世界,探索其强大的功能和灵活的开发模式。我们将从基础概念开始,逐步深入,了解 Django 如何帮助开发人员快速构建现代化的 Web 应用,并探讨一些最佳实践和高级技术。无论是初学者还…

Unity3D插件开发教程(二):制作批处理工具

Unity3D插件开发教程(二):制作批处理工具 文章来源:Unity3D插件开发教程(二):制作批处理工具 - 知乎 (zhihu.com) 声明: 题图来自于Gratisography | Free High Resolution Pictures…

QA测试开发工程师面试题满分问答25: JVM瓶颈分析,举例说明

回答思路 JVM 性能瓶颈概述: JVM (Java Virtual Machine)是 Java 程序运行的基础环境,其性能直接影响到应用程序的整体性能。在实际项目中,我们经常会遇到 JVM 性能瓶颈,导致应用程序出现响应缓慢、CPU 利用率高、内存溢出等问题。因此,分析和诊断 JVM 瓶颈是非常重要的工作,有…

SpringValidation

一、概述: ​ JSR 303中提出了Bean Validation,表示JavaBean的校验,Hibernate Validation是其具体实现,并对其进行了一些扩展,添加了一些实用的自定义校验注解。 ​ Spring中集成了这些内容,你可以在Spri…

小程序使用vant组件库

一:下载组件库 在小程序内npm下载的包 vant组件库官网:快速上手 - Vant Weapp (youzan.github.io) 1)首先有有package.json文件,没有的话则先初始化 即使通过package.json去下载包,也需要有,可以观察下载的包. 2)下载包 3)构建npm包 下载包之后存储在node_modules内,但是我们…

初学者必读:Midjourney AI创作工具的简易使用手册!

在数字化时代,AI的应用不断推动着各个领域的发展。在这些领域中,AI在艺术和设计方面的应用引起了广泛的关注。AI绘画软件作为今年的热门,Midjourney 通过其独特的原理和方便的使用方法,为创作者提供了一个全新的创作逼真绘画的平台…

大模型日报|今日必读的 5 篇大模型论文

大家好,今日必读的大模型论文来啦! 1.Meta 领衔:一文读懂视觉语言建模(VLM) 人们正在尝试将大型语言模型(LLMs)扩展到视觉领域。从可以引导我们穿越陌生环境的视觉助手,到仅使用高…

富港银行 优惠链接 邀请码 兑换码 优惠码 分享

首次记得一定要点击链接注册,注册开户费50美金 限时!优惠开通国际银行账户! cbi帐户管理费:10美元/月,余额>500美元,1美元/月/,余额>2000美元,0美元/月。 一定要显示50的时候…

一分钟学习数据安全——数字身份的三种模式

微软首席身份架构师金卡梅隆曾说:互联网的构建缺少一个身份层。互联网的构建方式让你无法得知所连接的人和物是什么。这限制了我们对互联网的使用,并让我们面临越来越多的危险。如果我们坐视不管,将面临迅速激增的盗窃和欺诈事件,…

短视频内容创意方法有哪些?成都科成博通文化传媒公司

短视频内容创意方法有哪些? 随着移动互联网的迅猛发展,短视频平台已成为人们日常生活中不可或缺的一部分。短视频以其短平快的特点,迅速吸引了大量用户。然而,面对海量的短视频内容,如何让自己的作品脱颖而出&#xf…

web自动化-下拉框操作/键鼠操作/文件上传

在我们做UI自动化测试的时候,会有一些元素需要特殊操作,比如下拉框操作/键鼠操作/文件上传。 下拉框操作 在我们很多页面里有下拉框的选择,这种元素怎么定位呢?下拉框分为两种类型:我们分别针对这两种元素进行定位和…

Nocobase快速上手 -第一个collection

本文记录Nocobase中如何创建collection,以及如何将collection展示到页面中,并且配置CRUD相应的操作. Collection 在NocoBase中,collection(集合)是用来组织和存储各种数据的容器,如订单、产品、用户、评论…

汽车电子零部件(14):TMS热管理系统

前言: TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要…

M功能-分布式锁-支付平台(五)

target:离开柬埔寨倒计时-218day 珍藏的图片又拿出来了 前言 M系统中的撮合引擎是最最核心的功能,第一版的撮合引擎不是我写的,也没有做交易对的动态分配这样的功能,都是基于抢锁方式来决定谁拥有该交易对的撮合权限,所…