JAVA学习-NIO.Channel(通道)

        在Java NIO中,Channel(通道)是用于在文件、套接字、管道等之间进行数据传输的对象,它类似于传统IO中的流。通道可以用于读取和写入数据,并且可以同时进行读写。

一、Java NIO中提供了几种类型的通道,主要有以下几种:

1. FileChannel:

用于对文件进行读写操作的通道。

2. DatagramChannel:

用于通过UDP协议进行网络数据传输的通道。

3. SocketChannel:

用于通过TCP协议进行网络数据传输的通道。

4. ServerSocketChannel:

用于监听TCP连接请求的通道。

二、这些通道类都实现了java.nio.channels.Channel接口,并且具有一些共同的特点和使用方法:

1. 打开通道(Open Channel):

可以通过使用静态工厂方法open()来打开通道,例如FileChannel.open()、DatagramChannel.open()等。

2. 读写数据(Read and Write Data):

通道可以通过read()方法读取数据到缓冲区,或者通过write()方法将数据从缓冲区写入通道。

3. 关闭通道(Close Channel):

使用通道完成操作后,应该及时关闭通道,可以使用close()方法来关闭通道。

4. 非阻塞模式(Non-blocking Mode):

通道可以设置为非阻塞模式,这样在进行读写操作时不会被阻塞。可以使用configureBlocking()方法来设置通道为阻塞或非阻塞模式。

三、与传统IO流相比,Java NIO的通道具有更高的性能和灵活性,可以同时进行读写操作,并且可以使用选择器(Selector)来管理多个通道的事件。

下面是一个简单的示例代码,演示了使用FileChannel进行文件读写的示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class FileChannelExample {public static void main(String[] args) {try (FileChannel inputChannel = new FileInputStream("input.txt").getChannel();FileChannel outputChannel = new FileOutputStream("output.txt").getChannel()) {// 创建一个缓冲区ByteBuffer buffer = ByteBuffer.allocate(1024);// 从输入通道读取数据到缓冲区while (inputChannel.read(buffer) != -1) {buffer.flip(); // 切换为读模式// 从缓冲区写入数据到输出通道outputChannel.write(buffer);buffer.clear(); // 清空缓冲区,准备下一次读取}} catch (Exception e) {e.printStackTrace();}}
}

         在上面的代码中,我们首先通过FileInputStream和FileOutputStream分别创建输入和输出的文件通道。然后我们创建一个ByteBuffer作为缓冲区,用于读取和写入数据。

         通过循环从输入通道读取数据到缓冲区,然后将缓冲区切换为读模式,再将数据从缓冲区写入输出通道。最后清空缓冲区,准备下一次读取。

         以上就是Java NIO中通道的概述、常用通道类型及其特点、使用方法以及与其他IO对比的优势和高级应用的简要说明。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

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

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

相关文章

一起学数据分析_3(模型建立与评估_1)

使用前面清洗好的数据来建立模型。使用自变量数据来预测是否存活(因变量)? (根据问题特征,选择合适的算法)算法选择路径: 1.切割训练集与测试集 import pandas as pd import numpy as np impo…

机器学习——编程实现从零构造训练集的决策树

自己搭建一棵决策树【长文预警】 忙了一个周末就写到了“构建决策树”这一步,还没有考虑划分测试集、验证集、“缺失值、连续值”,预剪枝、后剪枝的部分,后面再补吧(挖坑) 第二节内容:验证集划分\k折交叉…

字符串篇(四)

文章目录 1.26 ljust()函数1.27 lower()函数1.28 lstrip()函数1.29 maketrans()函数1.30 partition()函数1.31 replace()函数1.32 rfind()函数1.33 rindex()函数 1.26 ljust()函数 ljust() 是 Python 中字符串(str)对象的一个方法,用于将字符…

android、Jetpack Compose使用 Room数据库kapt注解时出现的相关问题整理。

谢谢阅览、关注!! 一、问题描述: 问题 1:> a failure occurred while executing org.jetbrains.kotlin.compilerrunner.gradlecompilerrunnerwithworkers$gradlekotlincompilerworkaction > internal compiler error. see log for more details 问题 2:a failure …

在Spring Boo动态修改日志级别

在Spring Boot中,可以通过编程的方式动态修改日志级别。以下是一个简单的例子,展示了如何使用Logback(Spring Boot默认的日志框架)来实现这一功能。 首先,确保你的项目已经包含了spring-boot-starter-logging依赖。 …

python爬虫之xpath入门

文章目录 一、前言参考文档: 二、xpath语法-基础语法常用路径表达式举例说明 三、xpath语法-谓语表达式举例注意 四、xpath语法-通配符语法实例 五、选取多个路径实例 六、Xpath Helper安装使用说明例子: 七、python中 xpath 的使用安装xpath 的依赖包xm…

基于yolov2深度学习网络的人脸检测matlab仿真,图像来自UMass数据集

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 网络架构与特征提取 4.2 输出表示 4.3损失函数设计 4.4预测阶段 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载…

爱注讲台三尺案不辞长作“育花”人

—记邵阳市优秀班主任、新宁县优秀教师周芳平 教育是人与人心灵上最美妙的接触,只要用心体察,用情关注,每一位学生都会走向金光大道。 ---题记 “亲爱的妈妈,祝您节日快乐!”2024年3月8日,一条从深圳华为…

28-3 文件上传漏洞 -白盒审计绕过

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、upload-labs 靶场的第7关 先进行代码审计 $is_upload = false; $msg = null; if (isset($_POST[submit])) {if (file_exists($UPLOAD_ADDR)) {$deny_ext = array(".php&…

机器学习 - PyTorch里的aggregation

在PyTorch里,可以在tensor里找到min, max, mean, sum 等aggregation值。 直接上代码 import torch x torch.arange(0, 100, 10) print(x) print(f"Minimum: {x.min()}") print(f"Minimum: {torch.min(x)}") print(f"Maximum: {x.max()}…

Spring Boot:筑基

Spring Boot 前言概述使用 Intellij idea 快速创建 Spring Boot 项目注意事项 前言 在学习 Spring 、SpringMVC 、MyBatis 和 JPA 框架的过程中,了解到 SSM 框架为 Java Web 开发提供了强大的后端支持,JPA 框架则简化了数据库的操作。然而,S…

安卓面试题多线程36-40

36. 请问什么是锁消除和锁粗化?(1)锁消除 所消除就是虚拟机根据一个对象是否真正存在同步情况,若不存在同步情况,则对该对象的访问无需经过加锁解锁的操作。 比如StringBuffer的append方法,因为append方法需要判断对象是否被占用,而如果代码不存在锁竞争,那么这部分的性…

Cesium:按行列绘制3DTiles的等分线

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制 3DTiles 对象的外包盒等分线。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵是…

算法第三十一天-区域和检索【数组不可变】

区域和检索-数组不可变 题目要求 解题思路 为方便描述,把 n u m s nums nums 记作 a a a。 对于数组 a a a,定义它的前缀和 s [ 0 ] 0 s [ 1 ] a [ 0 ] s [ 2 ] a [ 0 ] a [ 1 ] ⋮ s [ i ] a [ 0 ] a [ 1 ] ⋯ a [ i − 1 ] ∑ j 0 i −…

matplotlib使用总结1

matplotlib 是一个用于创建静态、动态和交云图的 Python 绘图库。它可以用于 Python 脚本、Python 和 IPython shell、Jupyter 笔记本、web 应用服务器以及四个图形用户界面工具包中。matplotlib 尝试让简单的事情更简单,让困难的事情成为可能。你可以生成线图、柱状…

借记卡年费和小额账户管理费,以及换卡面不换号

文章目录 年费和小额账户管理费减免政策:每家银行均可有一张借记卡享受双免政策减免政策:代发工资、低保、社保、医保、失业保险、养老金、退休金、住房公积金等账户减免政策:二、三类电子账户一类卡、二类卡和三类卡二、三类电子账户不收取年…

Rust字符串深入理解

一、概述 Rust是一种系统级语言,进行操作系统等底层应用开发,同时又具合理的抽象处理能力。在进行Rust编程时,字符串处理是程序员经常碰到的工作。本文深入解析Rust语言中字符串的使用,包括 static string,String与&a…

LeetCode 2578.最小和分割

给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足: num1 和 num2 直接连起来,得到 num 各数位的一个排列。 换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。 num…

x86 32 64 Arm这些听过但不懂,都是什么?是架构还是系统?一文梳理

x86 听过吗?64位操作系统知道吧 和x86什么关系32和64都是什么东西?曾经的我也一头雾水,今天我才来整理一下,惭愧惭愧!今天带着沉重的心情来梳理一下学习内容吧 如果你很熟悉很了解计算机的话,应该知道&…

深度分析:社科赛斯——穿越市场周期二十二年的考研机构

近日,一份由有关部门发布的统计数据引发了广泛关注:在中国,中小企业的平均寿命仅有3.7年,而小微企业更是不到3年。这一数字凸显了中小企业所面临的挑战与困境。然而,在这个充满风险与变化的商业环境中,社科…