Java基础之《netty(4)—NIO之Channel》

news2025/2/24 9:22:08

一、基本介绍

1、NIO的通道类似于流,但有些区别
(1)通道可以同时进行读写,而流只能读或者只能写
(2)通道可以实现异步读写数据
(3)通道可以从缓冲读数据,也可以写数据到缓冲

2、BIO中的stream是单向的,例如FileInputStream对象只能进行读取数据的操作,而NIO中的通道(Channel)是双向的,可以读操作,也可以写操作。

3、Channel在NIO中是一个接口
public interface Channel extends Closeable

4、常用的Channel类有:FileChannel、DatagramChannel、ServerSocketChannel(类似ServerSocket)、SocketChannel(类似Socket)。
真实类型:

5、FileChannel用于文件的数据读写,DatagramChannel用于UDP的数据读写,ServerSocketChannel和SocketChannel用于TCP的数据读写。

二、FileChannel类

1、FileChannel类主要用来对本地文件进行IO操作,常见方法有
读和写是站在channel通道的角度
(1)public abstract int read(ByteBuffer dst):从通道读取数据并放到缓冲区中
(2)public abstract int write(ByteBuffer src):把缓冲区的数据写到通道中
(3)public abstract long transferFrom(ReadableByteChannel src, long position, long count):从目标通道中复制数据到当前通道
(4)public abstract long transferTo(long position, long count, WritableByteChannel target):把数据从当前通道复制给目标通道

三、案例1:本地文件写数据

1、使用ByteBuffer(缓冲)和FileChannel(通道),将“hell,你好”写入到file01.txt中
2、文件不存在就创建
3、代码

NIOFileChannel01.java

package netty.channel;

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

public class NIOFileChannel01 {
	public static void main(String[] args) throws Exception {
		String str = "hello,你好";
		//创建一个输出流->包装到channel中
		FileOutputStream fileOutputStream = new FileOutputStream("d:\\file01.txt");
		
		//通过fileOutputStream输出流获取对应的FileChannel
		//这个fileChannel真实类型是FileChannelImpl
		FileChannel fileChannel = fileOutputStream.getChannel();
		
		//创建一个缓冲区ByteBuffer
		ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
		
		//将str放入到byteBuffer中
		byteBuffer.put(str.getBytes());
		
		//对byteBuffer进行flip
		byteBuffer.flip();
		
		//将byteBuffer里的数据,写入到fileChannel
		fileChannel.write(byteBuffer);
		
		//关闭流
		fileOutputStream.close();
	}
}

读写翻转前:

翻转后:

四、案例2:本地文件读数据

1、使用ByteBuffer(缓冲)和FileChannel(通道),将file01.txt中的数据读入到程序,并显示在控制台屏幕
2、假定文件已经存在
3、代码

NIOFileChannel02.java

package netty.channel;

import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class NIOFileChannel02 {
	public static void main(String[] args) throws Exception {
		//创建文件的输入流
		File file = new File("d:\\file01.txt");
		FileInputStream fileInputStream = new FileInputStream(file);
		
		//通过fileInputStream获取对应的FileChannel -> 实际类型FileChannelImpl
		FileChannel fileChannel = fileInputStream.getChannel();
		
		//创建缓冲区
		ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
		
		//将通道的数据读入到byteBuffer中
		fileChannel.read(byteBuffer);
		
		//将byteBuffer的字节数据转成String
		System.out.println(new String(byteBuffer.array())); //返回buffer中的字节数组hb
		
		//关闭流
		fileInputStream.close();
	}
}

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

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

相关文章

C++模板基础和STL之string

泛型编程之模板 使用实际调用的函数不是同一个&#xff0c;因为不同类型参数&#xff0c;函数栈帧中开辟的空间不一样。参数不一样&#xff0c;所以调用的函数也不一样。使用模板速度必重载速度更快&#xff0c;因为是编译器直接生成。而STL就叫标准模板库。 template<cla…

Activity的生命周期

文章目录Activity的生命周期一.返回栈二.Activity状态1.运行状态2.暂停状态3.停止状态4.销毁状态三.Activity的生存期onCreate()onStart()onResume()onPause()onStop()onDestroy()onRestart()完整生存期可见生存期前台生存期Activity的生命周期图体验Activity的生命周期编写三个…

PTA题目 阅览室

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时&#xff0c;管理员输入书号并按下S键&#xff0c;程序开始计时&#xff1b;当读者还书时&#xff0c;管理员输入书号并按下E键&#xff0c;程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时…

机器人工程考研难易主观感受和客观数据

简易版&#xff08;共性&#xff09;&#xff1a; 主观反馈&#xff1a;越来越难 客观数据&#xff1a;研究生录取人数越来越多&#xff0c;比例也越来越高 看起来矛盾&#xff0c;其实并非如此。 详细数据&#xff1a; 80后是指1980年至1989年出生的人口&#xff0c;对应2…

MySQL_07:单行函数

文章目录一、函数的基本理解1.函数的理解1.1内置函数的基本理解1.2不同DBMS函数的差异1.3MySQL的内置函数的分类2.图解多行函数和单行函数二、单行函数1.数值函数1.1基本函数1.2角度与弧度互换函数1.3三角函数1.4指数与对数1.5进制间转换2.字符串函数3.日期和时间函数3.1获取日…

python常用操作之使用多个界定符(分隔符)分割字符串

本系列文章会总结python中各种常见及常用的内置方法、对不同数据结构的操作&#xff0c;参考书籍《python cookbook》第三版 分割字符串单个界定符分割字符串代码演示多个界定符分割字符串代码演示注意总结在日常学习及工作中&#xff0c;不论是在解析数据还是在产出输出&#…

【LeetCode】No.98. Validate Binary Search Tree -- Java Version

题目链接&#xff1a;https://leetcode.com/problems/validate-binary-search-tree/ 1. 题目介绍&#xff08;Validate Binary Search Tree&#xff09; Given the root of a binary tree, determine if it is a valid binary search tree (BST). 【Translate】&#xff1a; 给…

Qt 堆栈窗体QStackedWidget使用

QStackedWidget控件相当于一个容器&#xff0c;提供一个空间来存放一系列的控件&#xff0c;并且每次只能有一个控件是可见的&#xff0c;即被设置为当前的控件。QStackedWidget可用于创建类似于QTabWidget提供的用户界面。 它是一个构建在QStackedLayout类之上的方便布局小部件…

dolphinscheduler 2.0.6 负载均衡源码

目录&#x1f42c;官网介绍&#x1f42c;负载均衡&#x1f420;加权随机&#xff08;random&#xff09;&#x1f420;平滑轮询&#xff08;roundrobin&#xff09;&#x1f420;线性负载&#xff08;lowerweight&#xff09;&#x1f435;其它&#x1f42c;官网介绍 官网资料&…

【计算机网络】网络层:虚拟专用网

由于IP地址的紧缺&#xff0c;一个机构能够申请到的IP地址数往往远小于本机构拥有的主机数。 如果一个机构内部的计算机通信也采用TCP/IP协议&#xff0c;那么这些仅字机构内部使用的计算机就可以由本机构自行分配其IP地址。 本地地址&#xff08;专用地址&#xff0c;互联网对…

Java培训教程给bean的属性赋值

依赖注入的方式 1. 通过bean的setXxx()方法赋值 Hello World中使用的就是这种方式 2. 通过bean的构造器赋值 Spring自动匹配合适的构造器<bean id“book” class“com.atguigu.spring.bean.Book” > <constructor-arg value “10010”/> …

有位p8终于把珍藏多年的算法视频给分享出来了,总共3.81G

大厂面试都开始问算法了&#xff0c;要是你不会算法只能与大厂失之交臂。为了解决大家算法方面的缺失&#xff0c;小编特此分享算法的学习路线和学习视频&#xff0c;希望大家能够喜欢&#xff01;&#xff01;&#xff01; 左神算法-KMP算法及其扩展 左神算法-Morris遍历及其…

S2B2C供应链系统将引领商业模式!S2B2C供应链电商系统实现订单管理数智化

近年来随着5G、人工智能、区块链、大数据、物联网等技术的快速发展&#xff0c;带动了数字经济的升级发展&#xff0c;疫情的不断反复更是加速推动了数字经济新发展&#xff0c;产业数字化和数字产业化进程加快&#xff0c;促进了各行各业快速发展&#xff0c;S2B2C供应链系统模…

17【redux】

17 【redux】 引言 我们现在开始学习了 Redux &#xff0c;在我们之前写的案例当中&#xff0c;我们对于状态的管理&#xff0c;都是通过 state 来实现的&#xff0c;比如&#xff0c;我们在给兄弟组件传递数据时&#xff0c;需要先将数据传递给父组件&#xff0c;再由父组件…

[附源码]Python计算机毕业设计大学生志愿者管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

软件工程经济学期末复习

1、利润 收入-成本费用 2、资产 流动资产非流动资产 3、显性成本可以用货币计量&#xff0c;是可以在会计的帐目上反映出来的 4、领取什么保险应缴纳个人所得税 商业保险 某企业一项固定资产的原价为800 0000元&#xff0c;预计使用年限为6年&#xff0c;预计净残值为5 0…

软件测试linux面试相关的知识

一、常用的命令 ls&#xff08;查看目录下的内容&#xff0c;-a显示隐藏目录&#xff09; cd&#xff08;进入某个目录&#xff0c;cd .. 返回上一层目录&#xff0c;cd - 返回上一次的目录&#xff0c;cd / 返回根目录&#xff09; pwd&#xff08;显示当前绝对路径&#x…

阿里云易立:以增效促降本,容器服务全面进入智能化时代

容器技术已经跨越鸿沟&#xff0c;广泛应用于金融、通讯、制造、交通等千行百业。Kubernetes支撑的工作负载也从早期单一的互联网应用发展到数据库、AI、大数据等等&#xff0c;并覆盖了公共云、专有云、边缘云等多样化、动态的云环境。 11月5日&#xff0c;2022杭州 云栖大会…

在Windows7在部署Hadoop+Hbase

0. 准备工作 0.1 电脑上现在没有jdk 0.1 提前准备好文件 1. 现在开始安装jdk 1.8.0_60 安装成功&#xff0c;没啥问题 小疑问&#xff1a;自动配置好了环境变量? 1.1 小记 在安装jdk的时候&#xff0c;有三种小工具&#xff0c;可以根据需要选择性安装 JDKjre源代码 虽…

牛客网语法篇练习基础语法(二)

1.牛牛正在给他的朋友们买电影票&#xff0c;已知一张电影票价是100元&#xff0c;计算 x 位朋友的总票价是多少&#xff1f; x int(input()) a x*100 print(a) 2.给定两个整数a和b (0 < a,b < 10,000)&#xff0c;计算a除以b的整数商和余数。 a,b map(int,input().…