通道(Channel)的原理获取

【BLE】HID设备开发实战:从自拍杆到复合设备的蓝牙控制方案 本文深入解析了BLE HID(低功耗蓝牙人机接口设备)的开发实战,从蓝牙自拍杆的工作原理切入,详细阐述了HID Report Map的设计与实现。通过拆解自拍杆、键盘、鼠标等案例,指导开发者如何利用BLE的低功耗与即插即用特性,构建从单一功能到键盘鼠标复合设备的完整蓝牙控制方案。 阅读详情

通道(Channel)的原理获取

通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理。Channel 负责传输, Buffer 负责存储。通道是由 java.nio.channels 包定义的。 Channel 表示 IO 源与目标打开的连接。Channel 类似于传统的“流”。只不过 Channel本身不能直接访问数据, Channel 只能与Buffer 进行交互。

java.nio.channels.Channel 接口:

          |--FileChannel  本地文件的通道

          |--SocketChannel

          |--ServerSocketChannel

          |--DatagramChannel

网络的关于通道

获取通道

  1. Java 针对支持通道的类提供了 getChannel() 方法

          本地 IO:

          FileInputStream/FileOutputStream

          RandomAccessFile

 

          网络IO:

          Socket

          ServerSocket

          DatagramSocket

         

  2. 在 JDK 1.7 中的 NIO.2 针对各个通道提供了静态方法 open()

  3. 在 JDK 1.7 中的 NIO.2 的 Files 工具类的 newByteChannel()

package com.toov5.Nio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import org.junit.jupiter.api.Test;


public class BUfferTest02 {
    // 非直接缓冲区 读写操作
    @Test
    public  void BUfferTest() throws IOException {
        // 读入流
        FileInputStream fileInputStream = new FileInputStream("aa.jpg");
        // 写入流
        FileOutputStream fileOutputStream = new FileOutputStream("bb.jpg");
        // 创建通道
        FileChannel iChannel = fileInputStream.getChannel(); // 读入流的通道
        FileChannel oChannel = fileOutputStream.getChannel(); // 写入流的通道
        //分配制定缓冲区大小
      ByteBuffer byteBuffer    = ByteBuffer.allocate(1024);
      while (iChannel.read(byteBuffer) != -1) {
            //开启读取模式
          byteBuffer.flip();
          //将数据写入到通道中
          oChannel.write(byteBuffer);
          byteBuffer.clear();          
    }
      //关闭通道、关闭连接
      iChannel.close();
      oChannel.close();
      fileInputStream.close();
      fileOutputStream.close();
      
    }
  
}

 

运行结果:

 

 直接缓冲区:

package com.toov5.Nio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
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;

import org.junit.jupiter.api.Test;


public class BUfferTest02 {
    @Test
    public void testZhiJie() throws IOException {
        //创建管道
    FileChannel inChannel =FileChannel.open(Paths.get("aa.jpg"), StandardOpenOption.READ);
    FileChannel outChannel =FileChannel.open(Paths.get("bb.jpg"),StandardOpenOption.READ,StandardOpenOption.WRITE,StandardOpenOption.CREATE );
    //定义映射文件
    MappedByteBuffer inMappedByteBuffer =inChannel.map(MapMode.READ_ONLY, 0, inChannel.size());
    MappedByteBuffer outMappedByteBuffer =outChannel.map(MapMode.READ_WRITE, 0, inChannel.size());
    //直接对缓冲区操作
     byte[] bytes = new byte[inMappedByteBuffer.limit()];
     inMappedByteBuffer.get(bytes);
     outMappedByteBuffer.put(bytes);
      inChannel.close();
      outChannel.close();
      System.out.println("操作直接缓冲区完毕");
    }
    
    
    
    // 非直接缓冲区 读写操作
    @Test
    public  void BUfferTest() throws IOException {
        // 读入流
        FileInputStream fileInputStream = new FileInputStream("aa.jpg");
        // 写入流
        FileOutputStream fileOutputStream = new FileOutputStream("bb.jpg");
        // 创建通道
        FileChannel iChannel = fileInputStream.getChannel(); // 读入流的通道
        FileChannel oChannel = fileOutputStream.getChannel(); // 写入流的通道
        //分配制定缓冲区大小
      ByteBuffer byteBuffer    = ByteBuffer.allocate(1024);
      while (iChannel.read(byteBuffer) != -1) {
            //开启读取模式
          byteBuffer.flip();
          //将数据写入到通道中
          oChannel.write(byteBuffer);
          byteBuffer.clear();          
    }
      //关闭通道、关闭连接
      iChannel.close();
      oChannel.close();
      fileInputStream.close();
      fileOutputStream.close();
      
    }
  
}

 

 

OPENSSL使用方法 预备知识KEY 通常指私钥。CSR 是 Certificate Signing Request 的缩写,即证书签名请求,这不是证书,只是包含申请证书的基本信息。生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。CRT 即 certificate的缩写,即证书。 X.509 是一种证书格式。对X.509证书来说,认证者总是CA或由CA指定的人,一份... 阅读详情

相关推荐

红帽RHCE考试下午-RHCE (RH294)任务概览[2021最新版]

RH294任务概览 考试时间4个小时,6台虚拟机,15道题 原来通过脚本或者集群做的题现在都需要使用playbook实现 考试时大概有6台虚拟服务器,都已经做好了互相的免密 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行 注意:考试时一定注意要求将playbook放在哪个用户的家目录中,就需要用指定的户登录做题!

SunMy的博客 5619

Java 8 的Stream流那么强大,你知道它的原理吗?

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。本文会对Stream的实现原理进行剖析。

2301_78588786的博客 305

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

本文提供了一份详细的Python教程,教你如何使用MediaPipe和BlazePose实现实时健身动作追踪。从环境配置、模型选型到实时视频流处理架构设计,再到健身动作量化分析和可视化反馈系统优化,教程涵盖了完整的实现步骤和代码示例,帮助开发者快速构建高效的姿态特征点检测系统。

weixin_42531779的博客 153

Channel

前面讲到,NIO中一个连接就是用一个Channel(通道)来表示。大家知道,从更广泛的层面来说,一个通道可以表示一个底层的文件描述符,例如硬件设备、文件、网络连接等。然而,远远不止如此,除了可以对应到底层文件描述符,Java NIO的通道还可以更加细化。例如,对应不同的网络传输协议类型,在Java中都有不同的NIOChannel(通道)实现。

qq_36449826的博客 7175

PRIDE数据库20年:2025更新

PRoteomics IDEntifications (PRIDE)数据库(https://www.ebi.ac.uk/pride/)是全球领先的基于质谱(MS)的蛋白质组学数据存储库,也是ProteomeXchange联盟的创始成员之一。本文总结了过去3年中PRIDE资源及相关工具的发展情况。提交到PRIDE存档的数据集数量平均每月达到约534个。主要得益于基础设施的持续改进,如用于超大数据集的新文件传输协议(Globus)、新的数据重新提交流程以及自动数据集验证过程。

多组・学・多组学 2063

VS code平台调试AutoLISP程序教程

VS code平台调试AutoLISP程序教程

BearElder的博客 3184

理解卷积神经网络中的通道 channel

原文链接:https://blog.youkuaiyun.com/sscc_learning/article/details/79814146在深度学习的算法学习中,都会提到 channels 这个概念。在一般的深度学习框架的 conv2d 中,如 tensorflow 、mxnet,channels 都是必填的一个参数。channels 该如何理解?先看一看不同框架中的解释文档。首先,是 tensorflo...

xys430381_1的专栏 1万+

数字音频接口之I2S总线协议详解

1、SDATA,也就是串行数据信号,使用二进制传输数字信号。请注意数据的传输形式为补码的方式2、例如音频的采样率是8K,一s内存采样8K个点,一个点包含一个左声道,一个右声道,所以LRCK是8K,BCLK是2×采样频率×采样位数3、同时双向(TX和RX)音频流:串行数据同步移位到时钟信号SCK和LRCK。在SCK的下降沿将TX数据写入SDOUT引脚,并在SCK的上升沿从SDIN引脚读取RX数据。始终首先发送最高有效位(MSB);TX和RX均可在主模式和从模式下使用。

卓学课堂 3万+

go语言channel学习与总结(一)channel的一些基本用法

go语言中,说到并发先想到到就是goroutine,在go程序中,我们可以执行成千上万个goroutine协程,但是只是单纯到并发执行某个函数意义是不大的,既能够在函数与函数之间交换数据,又能使成千上万的函数一起执行,这才是go语言设计的精妙绝伦。 Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。 这句话就是channel的核心设计理念。 channel在Go 语言中是一种特殊的类型(引用类型)。ch

shalaoq的博客 10万+

避开奸商套路!手把手教你用Thaiphoon Burner和CPU-Z,一眼看穿内存SPD信息有没有被篡改

本文教你使用Thaiphoon Burner和CPU-Z工具,快速识别内存SPD信息是否被篡改,避免购买到虚标频率或假冒颗粒的内存条。通过详细步骤和实战案例,帮助用户掌握内存检测技巧,确保硬件购买的透明度和安全性。

weixin_32228501的博客 682

论文阅读: SIGIR 2025 ID-Free Not Risk-Free: LLM-Powered Agents Unveil Risks in ID-Free Recommender Syste

咱们平时用的推荐系统(比如购物APP推商品、视频APP推剧),大多是“有ID”的——每个用户、每个商品都有个专属ID,系统靠这些ID记录你的浏览、购买历史,再给你推喜欢的东西。但这种方式有个大问题:新用户、新商品刚上线时没有ID历史数据,系统没法精准推荐,这就是“冷启动”难题。后来人们搞出了“无ID推荐系统”:不用ID了,改成直接分析商品的文字信息(比如商品标题、描述),靠大语言模型(LLM,类似ChatGPT的技术)把文字转成“语义代码”,再通过这些“代码”判断你可能喜欢什么。

CSPhD-winston的博客 977

Golang channel

channel

qq_37858332的博客 390

OpenClaw 2026.3.13 踩坑实录:飞书HTTP协议降级Bug与多版本回归问题汇总

摘要:OpenClaw v2026.3.13存在多个严重回归问题,包括飞书API调用协议意外降级为HTTP导致连接失败(#46100)、本地Gateway诊断矛盾(#45504)及设备配对CLI命令失效等。该版本发布流程本身也存在异常,被迫以v2026.3.13-1标签重新发布。建议飞书用户回退至v2026.3.8稳定版,其他用户谨慎升级。本文详细记录了各Bug现象、影响范围及临时解决方案,并梳理了飞书通道的"多版本回归史",指出其根源在于架构变迁和测试覆盖不足。最后提供了包含配置备份、

Maynor的博客 869

JAVA NIO 通道Channel的原理与获取方法

为什么80%的码农都做不了架构师?>>> ...

weixin_34029680的博客 712

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java NIO通道Channel的原理与获取

通道Channel:由java.nio.channels包定义。Channel表示IO源与目标打开的连接。Channel类似于传统的"流",只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。 传统的数据流: CPU处理IO,性能损耗太大 改为: 内存和IO接口之间加了 DMA(直接存储器),DMA向CPU申请权限,IO的操作全部由DMA管理。CPU

9395

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java nio channel原理_Java-NIO(四):通道(Channel)的原理与获取

通道(Channel):由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。通道主要用于传输数据,从缓冲区的一侧传到另一侧的实体(如文件、套接字...),反之亦然;通道是访问IO服务的导管,通过通道,我们可以以最小的开销来访问操作系统的I/O服务...

weixin_30444625的博客 491

JAVA NIO知识点总结(3)——通道Channel的原理与获取方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34290000的博客 697

NIO通道(channel)原理与获取

一、通道(Channel): 用于源节点与目标节点的连接。在java NIO中负责缓冲区中数据的传输。Channel本身不存储数据,因此需要配合缓冲区进行传输。二、通道的主要实现类 java.nio.channels.Channel接口: |– FileChannel |– SocketChannel |– ServerSocketChannel |– DatagramChannel三、获

http://kingim.cn/ 1万+

java 通道 双向原理_Java-NIO(四):通道(Channel)的原理与获取

通道(Channel):由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。通道主要用于传输数据,从缓冲区的一侧传到另一侧的实体(如文件、套接字...),反之亦然;通道是访问IO服务的导管,通过通道,我们可以以最小的开销来访问操作系统的I/O服务...

weixin_35908791的博客 697

Java-NIO(四):通道(Channel)的原理与获取

通道(Channel):   由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。通道主要用于传输数据,从缓冲区的一侧传到另一侧的实体(如文件、套接字...),反之亦然;通道是访问IO服务的导管,通过通道,我们可以以最小的开销来访问操作...

weixin_34185364的博客 1614

NIO-第三篇 : NIO通道(Channel)的原理与获取

一、通道由 java.nio.channels 包定义 的。Channel 表示 IO 源与目标打开的连接。 Channel 类似于传统的“流”。只不过 Channel ...

程序员果果的博客 1782

NIO之通道(Channel)的原理与获取以及数据传输与内存映射文件

通道(Channel)   由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。通道主要用于传输数据,从缓冲区的一侧传到另一侧的实体(如文件、套接字...),反之亦然;通道是访问IO服务的导管,通过通道,我们可以以最小的开销来访问操作...

dichengyan0013的博客 1366

Java NIO——通道(Channel)的原理与获取以及通道的数据传输和内存映射文件

1.什么是通道: 有java.nio.channels包定义的。Channel表示IO源与目标打开的连接。 Channel类似于传统的“流”。只不过Channel本身不能访问数据,Channel只能与Buffer交互。 2.那么通道是怎么发展过来的: 在最开始的时候程序等IO操作就是通过系统的IO接口与CPU进行交互,从而进行读写的操作,但是这样对于CPU来说负担太大,大大降低了CPU的利...

qq_38386085的博客 1391
上一篇: 直接缓冲区和非缓冲区
下一篇: 分散读取与聚集写入
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值