Java NIO知识整理

Java知识整理5-Java核心 (一)Java IO/NIO 概要:阻塞IO模型非阻塞IO模型多路复用IO模型信号驱动IO模型异步IO模型Java IOJava NIO--------------------------------------------------------------------------------------------1、阻塞IO模型    最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。当用户线程发出IO请求之后,内... 阅读详情

前几天学了下NIO这块,因之前基本没用到过也算是新知识,这篇文章着重分享Channel,内存映射,缓冲区不会做过多介绍,有兴趣可以百度一下找资料看

一   使用通道边读边写的经典写法

以复制图片到同一个目录为例,把wp.jpg复制一份放到d盘下

package com.debug;

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class UseChanel01 {

	public static void main(String[] args) throws Exception {
	
        File f1=new File("d:"+File.separator+"wp.jpg");
        File f2=new File("d:"+File.separator+"wp01.jpg");
        FileInputStream in=new FileInputStream(f1);
        FileOutputStream out=new FileOutputStream(f2);
        
        //取得输入输出流的通道
        FileChannel inChanel=in.getChannel();
        FileChannel outChanel=out.getChannel();
        //开辟缓冲
        ByteBuffer buf=ByteBuffer.allocate(1024);
        
        while(inChanel.read(buf)!=-1) {
        	buf.flip();//重设缓冲区
        	outChanel.write(buf);//输出到缓冲区
        	buf.clear();//清空缓冲区
        	
        }
        outChanel.close();
        inChanel.close();
        out.close();
        in.close();
        
        
	}

}

二  NIO2的写法

NIO2之后简化了获取Channel的方法,不需要通过InputStream和OutoutStream获取,代码如下

package com.debug;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class UseChannel02 {

	public static void main(String[] args) throws Exception {
		//NIO2 取得channel(不需要通过输入输出流取得)
		FileChannel inChaeenl=FileChannel.open(Paths.get("d:",File.separator,"wp.jpg"), StandardOpenOption.READ);
		FileChannel outChaeenl=FileChannel.open(Paths.get("d:",File.separator,"wp03.jpg"),StandardOpenOption.READ, StandardOpenOption.WRITE,StandardOpenOption.CREATE);

		//使用内存映射的方式'边读边写'
		MappedByteBuffer mapByteInBuffer=inChaeenl.map(MapMode.READ_ONLY, 0, inChaeenl.size());
		MappedByteBuffer  mapByteOutBuffer=outChaeenl.map(MapMode.READ_WRITE, 0, inChaeenl.size());
		
		byte[] dst=new byte[mapByteInBuffer.limit()];
		mapByteInBuffer.get(dst);
		mapByteOutBuffer.put(dst);
		
		outChaeenl.close();
		inChaeenl.close();
		
	}

}

三  除使用内存映射的方式还有其他使用起来更简洁的API

package com.debug;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class UseChannel03 {

	public static void main(String[] args) throws Exception {
		
		//NIO2 取得channel
		FileChannel inChaeenl=FileChannel.open(Paths.get("d:",File.separator,"wp.jpg"), StandardOpenOption.READ);
		FileChannel outChaeenl=FileChannel.open(Paths.get("d:",File.separator,"wp04.jpg"),StandardOpenOption.READ, StandardOpenOption.WRITE,StandardOpenOption.CREATE);

		//使用transferFrom或者transferTo进行边读边写(最简洁的方式)
		outChaeenl.transferFrom(inChaeenl, 0, inChaeenl.size());
		
		outChaeenl.close();
		inChaeenl.close();
		
	}

}


StarRocks FE启动异常 服务器断电,StarRocks FE 启动失败。 阅读详情

相关推荐

Aix升级和安装ssh配置过程

Aix升级和安装ssh配置过程Aix升级和安装ssh配置过程配置前背景配置步骤 Aix升级和安装ssh配置过程 部门IBM小型机的Aix操作系统需要进行ssh补丁修复,修复其实就是ssh版本你的升级,对升级的过程和中途遇到的问题做了记录如下。 配置前背景 操作系统: gdboss2/>uname -u //操作系统的Aix5.3 IBM,020693E5P gdboss2/&gt...

阿阿阿唱的博客 2992

NIO非阻塞网络编程

一、NIO 1、始于java 1.4,提供了新的JAVA IO操作非阻塞API,用意就是代替JAVA IO 和Java Networking相关的API。 NIO的三个核心组件: Buffer 缓冲区 Channel 通道 Selector 选择器 下面主要说下这三个核心组件 Buffer 缓冲区 1、缓冲区本质上是一个可以写入数据的内存块(类似数组),然后可以再次获取,此内存块包含在NIO Bu...

qq_40094875的博客 265

均匀直线阵的常规波束形成matlab

常规波束形成概述 波束形成是将基阵各阵元输出进行一定的处理,从而形成基阵空间指向性的技术。一个波束形成器可以对空间某方位的信号有响应,而抑制其他方位的信号,所以又被称为空域滤波。一般分为常规波束形成(CBF)和自适应波束形成(ABF)。 常规波束形成较为基础,一般又可以根据实现的途径不同,分为时延波束形成和频移波束形成。 时延波束形成 在各阵元间添加时延使波束控制于不同方位的方法成为时延波束形成。设定一个目标方向,当信号来源方向在该目标方向时,响应最大;信号来源于其他方向时,响应较小。将这种响应大小

Xujing1143的博客 2万+

java NIO系列教程1

ava NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从...

weixin_30263277的博客 207

2.1 量子精密测量:SERF原子陀螺仪中的核自旋-电子自旋强耦合机制

本文深入解析了SERF原子陀螺仪中核自旋-电子自旋强耦合机制的核心原理与应用。通过量子精密测量技术,SERF陀螺仪实现了超高精度的惯性导航,其独特的磁场自补偿和拉莫尔进动特性使其在弱磁场环境下表现出色。文章还探讨了关键技术突破和前沿进展,展示了量子精密测量在惯性导航领域的巨大潜力。

kotlin6android的博客 212

点击率预测的贝叶斯平滑

概述 电商领域中经常需要计算或预测一些转化率指标,如最典型的CTR(点击率,Click-Through Rate)。这些转化率可以是模型的预测值,也可以作为模型的特征(feature)使用。以商品点击率预测为例,CTR的值等于点击量(Click)除以曝光量(Impression或Exposure)。以rr表示点击率, r=CI(1)r=\frac{C}{I} \tag{1}. 但在实际应

小平子的专栏 3万+

Java核心知识点-NIO

文件读取中的NIO 在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据库,按块处理要比按字节处理数据快的多。 在NIO中有几个核心对象需

一次次成长的过程 3972

银河麒麟V10离线安装VLC播放器:依赖处理与3.0.9.2版本实操指南

在国产化操作系统日益普及的背景下,软件安装方式成为政企内网用户关注的重点。离线安装作为一种不依赖公网源的部署手段,常用于解决内网环境下的软件获取问题。其核心在于理解Linux包管理机制,如dpkg与apt对依赖关系的处理逻辑。掌握这一原理,不仅能应对多媒体软件的部署,也能提升系统维护效率。VLC作为跨平台多媒体播放器,凭借强大的解码能力与协议支持,广泛应用于本地视频播放、RTSP拉流及监控大屏等场景。本文从离线安装的通用概念出发,结合银河麒麟V10桌面版的实际环境,详细梳理了VLC 3.0.9.2离线包的获

weixin_32247165的博客 373

Java NIO系列知识(一) Java NIO概述

I/O(输入/输出)指的是计算机与外界或者一个程序与计算机其余部分交互的接口,相当于人的耳朵和嘴巴。在java编程中,我们最初接触到的就是以流的形式完成I/O,正如它的名字:流,所有的I/O操作都只能是单向的一个或者多个字节的移动,而且还是阻塞式的,这就造成了效率的低下和资源的浪费。 为了解决这个问题,在JDK1.4中引入了新方案:Java NIO,它既可以说是New IO,也可以说是No-Blo...

Lincain的博客 1242

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 666

Python实战:5分钟搞定固定翼无人机三自由度仿真(附完整代码)

本文提供了一个基于Python的固定翼无人机三自由度仿真快速实现方案。通过面向对象设计,封装了核心运动学模型,并对比了欧拉法与龙格-库塔法两种积分方法。文章附有完整实例代码,帮助算法工程师和研究人员在5分钟内搭建轻量级仿真环境,用于快速验证控制律、路径规划等核心算法逻辑。

docker7nomad的博客 749

java NIO中的Reactor相关知识汇总 (转)

转自:https://www.cnblogs.com/softidea/p/5042813.html 目录 一、引子 二、网络IO模型 三、Reactor模式 四、NIO 五、一个例子 一、引子 nio是java的IO框架里边十分重要的一部分内容,其最核心的就是提供了非阻塞IO的处理方式,最典型的应用场景就是处理网络连接。很多同学提起nio都能说起一二,但是细究其背后的原理、思...

统木木的博客 1088

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java NIO知识整理

Selector类是NIO的核心类,Selector能够检测多个注册的通道上是否有事件发生,如果有事 件发生,便获取事件然后针对每个事件进行相应的响应处理 NIO和传统IO之间第一个大的区别是,IO是面向流的,NIO是面向缓冲区的 ...

AReallyMan的博客 158

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java Nio零散知识点整理

本文内容来源自 博客园大牛陈皓的一篇文章 原文http://blog.youkuaiyun.com/haoel/article/details/2224069 在NIO的select机制中: 一个阻塞在select上的线程有以下三种方式可以被唤醒: 1)有数据可读/写,或出现异常。 2)阻塞时间到,即time out。 3)收到一个non-block的信号。可由kill或pthread...

weixin_34310785的博客 129

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java NIO知识整理第一章

1、为什么不直接让磁盘控制器把数据送到用户空间的缓冲区呢? 这样做有几个问题。首先,硬件通常不能直接访问用户空间 。其次,像磁盘这样基于块存储的硬件设备操作的是固定大小的数据块,而用户进程请求的可能是任意大小的或非对齐的数据块。在数据往来于用户空间与存储设备的过程中,内核负责数据的分解、再组合工作,因此充当着中间人的角色。 2、如今在运行时优化方面,JVM 已然前进了一大步。现在 JVM 运行字...

huanchankuang3257的博客 224

Java NIO基础知识整理(一)

NIO特性 1、为原始类提供缓存支持; 2、字符集编码解码解决方案; 3、Channel :一个新的原始 I/O 抽象; 4、支持锁和内存映射文件的文件访问接口; 5、提供多路非阻塞式(non-bloking)的高伸缩性网络 I/O。 Buffer 在基本I/O操作中所有的操作都是直接以流的形式完成的,而在NIO中所有的操作都要使用到缓冲区处理,且所有的读写操作都是通过缓冲区完成的。

screensky的专栏 666

Java NIO基础知识整理(二)

非阻塞I/O JavaNIO的一个非常重要的特点就是,引入了非阻塞的I/O。其中Selector类是非阻塞I/O的核心类。Selector是一个能够检查多个Channel,并发现哪些Channel已经准备好了数据传送的NIO组件。这样可以在一个线程去管理多个Channel,例如多个网络连接。...

126

Java NIO 技术知识点整理xmind

xmind文件下载地址:https://www.processon.com/mindmap/5d64d359e4b04399f5b42b8c

君寞傲 730

JAVA 基础知识整理-18其他的流,Properties, NIO

1. DataOuputStream 数据输出流使应用程序以便携式方式将原始Java数据类型写入输出流。 然后应用程序可以使用数据输入流来读取数据。 构造方法: DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。 方法: void flush() 刷新此数据输出流。 int size() 返回计数器的当前值 written ...

KathyLJQ的博客 229

JAVA后端知识点碎片化整理 基础篇(八) NIO(netty)

因为马上开始2019秋招、平时的学习比较琐碎、JAVA后端博大精深,想在暑假这段时间从头开始整理JAVA知识点查缺补漏,迎战2019秋招。主要参考(微信公众号)JAVA团长与(博客园)五月的仓颉的知识点复习线,对其列出的每一个的知识点再一次的咀嚼并谈谈自己的理解。(平时从这两位学到很多,也非常感谢身边同行的人)补充一下:其中知识点的讲解参考了之前看过的博客讲解或者书籍,之所以称之为基础篇,主要是加...

努力的颜值巨兽博客 443

好记性不如烂笔头——NIO学习笔记

本文是对NIO知识的归纳与整理1.阻塞与同步1)阻塞(Block)和非租塞(NonBlock):阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候阻塞:往往需要等待缞冲区中的数据准备好过后才处理其他的事情,否則一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回2)同步(Sync...

weixin_33726318的博客 155

java read非阻塞_Java NIO知识点整理(四) 如何设计一个非阻塞服务

前面几个章节了解到了对于NIO来说几个重要点组建:Selector、Channel、Buffer,但是真正去设计一个通信组建还是很困难的,比如比较出名的通信框架Netty是通过多个Pipelines(管道)组件链来处理非阻塞的IO。一、一个最简单的非阻塞IO Pipeline设计理念非阻塞IO管道可以使用一个线程从多个流读取消息。在非阻塞模式下,当您试图从流中读取数据时,流可能返回0或更多字节。如...

weixin_42151772的博客 225

Java基础知识点梳理

(转)Java基础知识复习 2012-09-24 00:15 by 横刀天笑, 173 阅读, 0 评论, 收...

wzhw2008的专栏 161

Java复习之知识点整理(三十一)---内省,代理模式,NIO,ByteBuffer ,Channel , GC

一、内省Introspector,操作标准javabean的类 --------------------------------------------------------------- /**      * 测试内省      */     @Test     public void tsIntrospector()     {         try {                ...

xcvbxv01的博客 255

Java复习之知识点整理(三十二)---Selectors 挑选器,NIO实现Socket编程

一、Selectors 挑选器 ---------------------------------------------------------------------     1.Selectors:用于挑选通道感兴趣的方法是否发生,是selectkey的集合     2.SelectionKey:表示通道和selector之间的一种绑定,是对通道的一种封装     3.Selector.op...

xcvbxv01的博客 364
上一篇: linux部署SpringBoot程序
下一篇: java线程之Executor框架与线程池
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值