Java nio

合肥-NIO蔚来汽车JAVA开发 面试一面电话二面视频(需要写代码)视频一视频二视频三 一面电话 时长:30分钟 实际:25分钟的样子 难度:一般 Nacos注册中心原理 从raft选举到pull、push整个流程 Dubbo调用原理 首先跟面试官说了dubbo怎么把服务注册到nacos中,再到从nacos中获取注册服务列表,调用的几种方式和负载均衡算法 Dubbo中3个消费者、4个提供者共建立了多少个连接 这个题回答了好久,主要是前面问了nacos,还以为dubbo跟nacos建立了多少链接,后面面试官说消费者和提供 阅读详情

Java提供了NIO来提高在文件上的访问速度,主要由缓冲器buffer和与缓冲器打交道的FileChannel 道之所以速度快于旧的IO库,是它的结构更接近于os执行IO的方式

Buffer 的子类有:ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer 和 shortBuffer.


缓冲器的4个细节  ps:引用我在另一端博文中看到的介绍 我觉得会比本人所写的更容易理解

  • 容量(Capacity):缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变。
  • 上界(Limit):缓冲区的第一个不能被读或写的元素。缓冲创建时,limit 的值等于 capacity 的值。假设 capacity = 1024,我们在程序中设置了 limit = 512,说明,Buffer 的容量为 1024,但是从 512 之后既不能读也不能写,因此可以理解成,Buffer 的实际可用大小为 512。
  • 位置(Position):下一个要被读或写的元素的索引。位置会自动由相应的 get() 和 put() 函数更新。 这里需要注意的是positon的位置是从0开始的。
  • 标记(Mark):一个备忘位置。标记在设定前是未定义的(undefined)。使用场景是,假设缓冲区中有 10 个元素,position 目前的位置为 2(也就是如果get的话是第三个元素),现在只想发送 6 - 10 之间的缓冲数据,此时我们可以 buffer.mark(buffer.position()),即把当前的 position 记入 mark 中,然后 buffer.postion(6),此时发送给 channel 的数据就是 6 - 10 的数据。发送完后,我们可以调用 buffer.reset() 使得 position = mark,因此这里的 mark 只是用于临时记录一下位置用的。
请切记,在使用 Buffer 时,我们实际操作的就是这四个属性的值。我们发现,Buffer 类并没有包括 get() 或 put() 函数。但是,每一个Buffer 的子类都有这两个函数,但它们所采用的参数类型,以及它们返回的数据类型,对每个子类来说都是唯一的,所以它们不能在顶层 Buffer 类中被抽象地声明。它们的定义必须被特定类型的子类所遵从。 


下面是我自己对NIO中的 FileChannel  和 ByteBuffer 愚见:

                

ByteBuffer是一个唯一与通道交互的缓冲器 下面是它的常用发法:

  ByteBuffer buffer =ByteByifer.allocate(SIZE);  //SIZE是分配ByteBuffer的数量 它可以是一个static变量 在分配之后不可以在变 所以分配多少数目尤为重要。

   buffer.wrap("  xxxxxxx".getBytes()); //只能用于接收byte类型的数据, 所以需要将它转化为byte字节数组 用getBytes().   当然也可以使用put方法直接进行填充。

                   buffer.flip() 用于反转通道 .此外他还有另一种含义 将在下面介绍.


尽管ByteBuffer只能保存字节类型的数据,但是它具有可以从其所容纳的的字节中产生出各种不同基本类型值的方法。记住是基本类型。向基本类型插入数据的最简单方法就是使用asCharBuffer() ,  asShortBuffer()等等 然后使用put() 方法

                    buffer.asShortBuffer().put((short) 1234) //在使用shortBuffer put方法时 需要强制转换成short 而其他的所有基本类型都不需要

                                        


  FileChannel 是一个与缓冲器交互的通道 它由三个类所产生分别为 FileInputStream FileOutputStream 和 可读可写的RandomAccessFile 因为这三个类是字节操作流所以不能用字符操作流Reader和Witer产生通道. 下面是对FileChannel的常用方法做解释:

FileChannel  channel = new RandomAccessFile("文件名","rw") .getChannel;  //对FileChannel 实例化 getChannel用于关联唯一文件通道

                         channel.wrier() //用于写入数据  他的参数必须是buffer 类型

                          channel.read() //读取数据   这里需要注意 每次读取数据后需要反转 所以他的后面必须接上 buffer.filp()

                          channel.position()  //设置读写位置


下面是对上文所写出的java代码 在d盘data.txt文件上读写数据:   

  import java.io.*;

import java.util.*;
import java.nio.*;
import java.nio.channels.*;
public class Channel {


private static final int BSIZE = 1024;
public static void main(String[] args)throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(BSIZE);
buffer.asShortBuffer().put((short)123);
 
       
   FileChannel channel = new FileOutputStream("d://data.txt").getChannel();//getChannel与D盘data关联  
        channel.write(ByteBuffer.wrap("data_name".getBytes()));   
        channel.close(); 
  
        channel = new FileInputStream("d://data.txt").getChannel();  
        channel.read(buffer);  
        buffer.flip();// 反转此通道  
        
            
        channel = new RandomAccessFile("d://data.txt", "rw").getChannel();//可读可写模式关联  
        channel.position(channel.size());// 移动到文件结尾  
        channel.write(ByteBuffer.wrap(" data_name".getBytes()));  
        channel.close();  
  
       
        while (buffer.hasRemaining()) {  
       System.out.println((char) buffer.get());  
        }


}


}


java NIO及NIO聊天室 参考链接: java NIO实例1:http://blog.chinaunix.net/uid-25808509-id-3346228.html java NIO教程之selector(一系列):http://ifeve.com/selectors/ java NIO与IO的比较:http://blog.youkuaiyun.com/keda8997110/article/details/19549 阅读详情

相关推荐

【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (上篇)(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1605

JAVA NIO详解

1. IO 和 NIO 相关的预备知识 1.1 IO 的含义 讲 NIO 之前,我们先来看一下 IO。 Java IO 即 Java 输入输出。在开发应用软件时,很多时候都需要和各种输入输出相关的媒介打交道。与媒介进行 IO 操作的过程十分复杂,需要考虑众多因素,比如:进行 IO 操作媒介的类型(文件、控制台、网络)、通信方式(顺序、随机、二进制、按字符、按字、按行等等)。 Java 类库提供了相...

努力奔跑 2万+

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 239

【蔚来汽车日常实习】蔚来汽车Java后端实习

【蔚来汽车日常实习】蔚来汽车Java后端实习

qq_44653420的博客 1619

Linux安装Oracle sqlplus客户端工具

Linux安装Oracle sqlplus客户端工具

优快云_Nan_Jiang_Li的博客 2777

python 识别滑块验证码

博客来源于: https://www.cnblogs.com/wyh0923/p/16528354.html # -*- coding: utf-8 -*- # https://gov.pkulaw.cn/ 1. import io 2. import json 3. from pathlib import Path 4. from PIL import Image 5. import bas...

2103

java nio 详_java NIO 详解

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。Java NIO提供了与标准IO不同的IO工作方式:Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总...

weixin_35282700的博客 1万+

AI颠覆市场调研:生成式智能体如何重构商业决策?

AI正在将市场调研从"成本中心"转变为"战略武器"。当企业能够用生成式智能体实时模拟百万级虚拟用户时,传统调研的样本偏差、时间滞后、成本高昂等问题将不复存在。对于开发者而言,这不仅是技术的狂欢,更是参与商业规则重构的历史机遇。行动建议立即体验Simile/Aaru的智能体平台,验证虚拟样本效果参与LLM持续性记忆架构的开源项目(如Memory Llama)关注AI调研API的标准化进程(如Hugging Face的Market Research Toolkit)

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 617

Java NIO详解

JAVA NIO 简介 NIO与IO的对比

代码充实生活的博客 1万+

干货满满!AI应用架构师分享AI驱动虚拟展示干货

虚拟展示(Virtual Presentation):用数字技术将物理对象/场景转化为可交互的虚拟内容(比如3D文物、虚拟试衣间);AI驱动(AI-Powered):通过AI技术实现实时交互、智能决策、个性化生成,让虚拟内容“活”起来;AI驱动虚拟展示:以用户体验为核心,将“3D渲染+AI理解+实时数据”融合,形成“感知-决策-反馈”的闭环系统。前端交互层是用户直接体验到的部分,再厉害的AI和渲染,只要前端交互烂,用户都会跑。我见过很多团队为了“炫技”做了复杂的AI功能,结果用户不会用。

AI大模型应用之禅 539

1.DJI-payload SDK负载开发准备和硬件连接及运行示例代码

大疆psdk开发环境

哒宰的博客 1443

Java NIO真得就这么简单

Java NIO真得就这么简单 大多数人肯定了解Java IO, 但是对于NIO一般是陌生的,但是Java NIO是一个高频知识点,又不得不学,所以本文通过图文+代码的方式,保姆级别的讲述Java NIO的各个知识点。觉得写得好的,希望点个赞,给个收藏。 Java IO 与 Java NIO的区别 Java IO 与 Java NIO读取文件的差别 普通Java IO public static void ioReadFile(String fileName) throws Exception {

zycxnanwang的博客 2599

OpenCV 实战篇——如何测算出任一副图片中的物体的实际尺寸?传感器尺寸与像元尺寸的关系?

本文介绍了通过相机图像测算物体实际尺寸的方法,重点分析了传感器参数与成像质量的关系。文章首先给出了物体实际尺寸的计算公式,涉及像素尺寸、距离、分辨率等参数。然后详细解析了传感器尺寸与像元尺寸的关系,指出相同分辨率下更大的传感器能获得更好的成像质量。此外还介绍了光学尺寸、像素尺寸对成像的影响,以及帧率的概念。最后提及了相机标定的重要性,并概述了从像素坐标系转换到世界坐标系的基本思路。这些知识为通过相机图像进行精确测量提供了理论基础。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1338

nio java是什么_JAVA NIO是什么(zz)

JAVA NIO是什么?1.基本概念IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )2.Java标准 io回顾Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层实现,...

weixin_34828613的博客 2708

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java NIO 总结: NIO技术基础回顾

Java NIO是Java 1.4版本引入的一套新的IO API,它提供了非阻塞IO操作的功能,支持面向缓冲区的、基于通道的IO操作。Java NIO的核心组件包括Channels、Buffers和Selectors。

码到三十五 1560

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java NIO 详解

前言 本篇将分为BIO、NIO概念介绍、javaNIO组件、并发NIO简易模型实例三部分组成,为读者和我自己增加对NIO的理解。 一、概念认知 这里主要是介绍NIO,但是在介绍NIO的时候难免会提到BIO,所以这里也顺带介绍一下什么是BIO,由此切入NIO。 1 什么是IO 在介绍BIO之前先来了解一下更加普遍的概念IO,IO是输入流和输出流的统称,在IO的世界里,有几个重要的概念,分别是同步、异步、阻塞、非阻塞,在这一小部分主要也是介绍这四个的概念。 同步与异步 同步异步中有一个主线程的概念问题,就是当前

Burnup_110的博客 3290

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java NIO使用

Java NIO 概念 Java NIO(New IO),No Blocking IO 非阻塞IO,是从Java1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的,基于通道的IO操作。NIO将以更加高效的方式进行文件读写操作 IO和NIO的区别 IO NIO 面向流(Stream Oriented) 面向缓冲区(Buffer Oriented) 阻塞IO(Blocking I

Hai-Yang-code的博客 6605

java当中什么是NIO

Java NIO作为一种高效的I/O处理方式,特别适合于需要处理大量并发连接的场景。通过使用通道、缓冲区和选择器,NIO在提供非阻塞I/O操作的同时,也提供了灵活的数据处理能力。尽管NIO的编程模型比传统的BIO更为复杂,但在高并发、高性能的应用中,NIO无疑是一个值得选择的解决方案。随着Java的发展,NIO已经成为Java生态中不可或缺的重要组成部分,未来它在高性能计算和并发处理领域将继续发挥重要作用。

Flying_Fish_roe的博客 2613

java nio_什么是JAVA NIO

NIO(Non-Blocking I/O,java中,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,是解决高并发、I/O处理问题的有效方式。一、传统的BIOBIO(Blocking I/O)即同步阻塞I/O,在NIO出现之前主要使用BIO及新建线程的方式来解决并发请求,但这样很容易因线程瓶颈而造成限制。下面是BIO的经典编程模...

weixin_33838871的博客 239

Java NIO(一):认识NIO

本文介绍了Java NIO的核心概念与应用场景。NIO通过缓冲区、通道和选择器三大组件,解决了传统IO在高并发和大数据量传输时的性能瓶颈。文章对比了BIO与NIO的差异,详细解析了Buffer的工作原理和Channel类型,并举例说明了Selector在多路复用中的优势。通过文件拷贝的代码示例展示了NIO的实际应用,同时从直接内存和零拷贝两方面解释了NIO的性能优势。最后指出BIO适用于简单场景,而NIO更适合高并发网络应用,并建议网络编程优先使用Netty框架而非原生NIO。全文系统性地阐述了NIO的核心

欧阳方超的专栏 1147

Java的NIO

NIO:Java新的IO,非阻塞的IO

weixin_43872993的博客 2014

java nio通信_JAVA NIO 通信

一.java NIO 和阻塞I/O的区别1. 阻塞I/O通信模型2. java NIO原理及通信模型二.java NIO服务端和客户端代码实现具体分析:一.java NIO 和阻塞I/O的区别1. 阻塞I/O通信模型假如现在你对阻塞I/O已有了一定了解,我们知道阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时(或超时)才会返回;同样,在调用ServerSo...

weixin_29356815的博客 324

java nio书籍_《Java NIO》这本书

这两天花了时间学习了java的nio,看的书是Ron Hitchens著的 《Java NIO》,总的来说,这本书真的写的非常好,而且整本书将java nio的内容从底层讲了个遍,书不厚,但是确实值得一读,这里总结一下学习后的一些心得。学习过程中既详细看完了《Java NIO》这本书,同时也参照了http://zhangshixi.iteye.com/blog/679959该作者写的关于NIO的博...

weixin_39914868的博客 1517

Java NIO

尚硅谷Java NIO

sd_960614的博客 634

Java NIO、NIO.2学习笔记

相关学习资料 http://www.molotang.com/articles/903.html http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html 目录 1. NIO、NIO.2简介 2. NIO中的关键技术 1. NIO、NIO.2简介 Java中的输入流、输出流都是阻塞式的输入、输出。不仅如此...

liyongshun82的博客 802
下一篇: kmp算法
zh_coder
博客等级 码龄12年 31粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值