Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java NIO高性能网络编程(三)-Channel

Java NIO高性能网络编程(三)-Channel

作者头像
JavaEdge
发布于 2021-02-22 08:28:50
发布于 2021-02-22 08:28:50
54100
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

Java NIO的Channel类似流,是用于传输数据的数据流,但有不同:

  • 既可从通道中读取数据,又可写数据到通道。但流的读写通常单向
  • 通道可异步读写
  • 通道中的数据总要先读到一个Buffer或从一个Buffer中写入

从Channel读数据到缓冲区,从缓冲区写数据到Channel。

Channel的实现

Java NIO中最重要的通道的实现:

  • FileChannel 从文件中读写数据。
  • DatagramChannel 通过UDP读写网络中的数据。
  • SocketChannel 通过TCP读写网络中的数据。
  • ServerSocketChannel 监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

Channel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);
while (bytesRead != -1) {
  System.out.println("Read " + bytesRead);
  buf.flip();

  while(buf.hasRemaining()){
      System.out.print((char) buf.get());
  }

  buf.clear();
  bytesRead = inChannel.read(buf);
}
aFile.close()

注意 buf.flip(),首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。

参考

  • http://tutorials.jenkov.com/java-nio/channels.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java SE】Java NIO系列教程(二) Channel
Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Bu
用户1257215
2018/01/30
6810
【Java SE】Java NIO系列教程(二) Channel
腾讯四面:说说你对Java NIO的通道Channel的理解
喜欢文章记得关注我点赞哟,感谢支持!重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!
Java程序猿
2021/02/23
4010
Java NIO 系列学习 03 - Channels
Java NIO Channels 在很多地方都与 streams 相似,不同点有下面几个:
许杨淼淼
2019/12/29
5230
Java NIO-2.Channel
Java NIO 的Channels和流(stream)很像,但是有如下区别: Channels既能读又能写,Stream只能读或者写 Channels能异步读写 Channels只能读到Buffer中,或者从Buffer写入 Channel实例 以下是Java NIO中重要的的Channel实例: FileChannel:从/往文件中读/写 DatagramChannel:通过UDP读写网络数据 SocketChannel:通过TCP读写网络数据 ServerSocketChannel:监听接入的TCP连
悠扬前奏
2019/06/02
3900
Java NIO 系列(转)
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。
用户6182664
2019/09/05
6360
Java NIO实现原理之Channel
Channel类似与流,通道的特点: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 channel的类结构图如下:
Monica2333
2020/06/19
9570
总结了才知道,原来Java NIO的channel是这么用的!
Channel(实现接口java.nio.channels.Channel的类)旨在提供往返NIO缓冲区的批量数据传输。这是与比较高级的I/O库(包java.io和java.net)的类并行存在的底层数据传输机制。可以从高级的数据传输类(例如java.io.File,java.net.ServerSocket或java.net.Socket)获得Channel实现,反之亦然。 Channel类似于在类似Unix的“文件描述符”。
JavaEdge
2021/10/18
8400
【Java SE】Java NIO系列教程(三) Buffer
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 下面是NIO Buffer相关的话题列表: Buffer的基本用法 Buffer的capacity,position和limit Buffer的类型 Buffer的分配 向Buffer中写数据 flip()方法 从Buffer中读取数据 clear
用户1257215
2018/01/30
6550
【Java SE】Java NIO系列教程(三) Buffer
Java Nio 基本概念&操作
Java Nio 基本概念,相关组件介绍和一些基本操作
俺也想起舞
2020/10/30
5170
Java Nio 基本概念&操作
NIO系列(一)——介绍和Buffer缓冲区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
5720
NIO系列(一)——介绍和Buffer缓冲区
《最佳实践》-NIO知识梳理
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。
九灵
2020/12/13
3700
Java NIO 系列学习 08 - FileChannel
Java NIO FileChannel 是连接文件的channel。使用fileChannle可以实现从文件中读写数据。FileChannel是用来替代Java标准库IO API的。
许杨淼淼
2019/12/29
6420
Java NIO笔记
limit:在写模式下,Buffer的limit表示你最多能往Buffer里写多少数据,写模式下,等于Buffer的capacity。 position:在写模式下,position表示当前的位置。初始值为0,最大可为capacity-1. capacity:一个内存块,Buffer的固定的大小值。
haifeiWu
2018/09/11
4850
NIO学习之NIO概述和FileChannel详解
Java NIO(New IO 或 Non Blocking IO)是从 Java 1.4 版本开始引入的一个新的IO API,可以替代标准的 Java IO API。NIO 支持面向缓冲区的、基于通道的 IO 操作。NIO 将以更加高效的方式进行文件的读写操作。
大忽悠爱学习
2021/12/07
4590
NIO学习之NIO概述和FileChannel详解
NIO之FileChannel解读
FileChannel 类可以实现常用的 read,write 以及 scatter/gather 操作,同时它也提 供了很多专用于文件的新方法。这些方法中的许多都是我们所熟悉的文件操作。
一个风轻云淡
2023/10/15
3500
NIO之FileChannel解读
NIO最全教程,看这一篇就够了
Java NIO(New IO 或 Non Blocking IO)是从 Java 1.4 版本开始引入的一个新的 IO API,可以替代标准的 Java IO API。NIO 支持面向缓冲区的、基于通道的 IO 操作。NIO 将以更加高效的方式进行文件的读写操作。
公众号 IT老哥
2020/09/16
7230
NIO最全教程,看这一篇就够了
【Java SE】Java NIO系列教程(七)FileChannel
英文:Jakob Jenkov 译文:ifeve - 周泰 链接:http://ifeve.com/file-channel/ Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFi
用户1257215
2018/01/30
6480
【Java SE】Java NIO系列教程(七)FileChannel
java nio 详_java NIO 详解
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。
全栈程序员站长
2022/09/08
8110
java nio 详_java NIO 详解
JavaNIO快速入门
NIO是Jdk中非常重要的一个组成部分,基于它的Netty开源框架可以很方便的开发高性能、高可靠性的网络服务器和客户端程序。本文将就其核心基础类型Channel, Buffer, Selector进行
用户1216676
2018/01/24
1.9K0
Java NIO-3.Buffer
Java NIO Buffers用来和NIO Channels交互。正如前文所述,数据从通道中读到缓冲区,或者从缓冲区写到通道。 缓冲区本质上是一块能写入数据,并延迟读取的内存。这块内存被包装成一个NIO Buffer类,并提供了一组方法简化对它的访问。
悠扬前奏
2019/05/30
4430
相关推荐
【Java SE】Java NIO系列教程(二) Channel
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档