腾讯四面:说说你对Java NIO的通道Channel的理解

简介: - Channel是双向的,我们既可以向Channel中写数据,也可以从Channel中读取数据。但流的读写通常是单向的。

前言

Java NIO中的Channel和流类似,但不完全相同:

  • Channel是双向的,我们既可以向Channel中写数据,也可以从Channel中读取数据。但流的读写通常是单向的。
  • Channel可以实现异步地读写。
  • Channel中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入,如下图:

Channel的实现

  • FileChannel 可以从文件中读取数据
  • DatagramChannel 通过UDP协议,读写网络中的数据
  • SocketChannel 通过TCP协议,读写网络中的数据
  • ServerSocketChannel 可以监听新建立的TCP连接,就像Web服务器一样,对每个新建立的连接都创建一个SocketChannel

金三银四读者福利:整理好的 金三银四面试资料集锦 分享。

FileChannel 示例

packagesuccess;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.RandomAccessFile;
importjava.nio.ByteBuffer;
importjava.nio.channels.FileChannel;
publicclassDemo {
publicstaticvoidmain(String[] args)throwsIOException {
//新建随机访问文件对象
RandomAccessFile aFile =newRandomAccessFile("D://text.txt", "rw");
//获取文件对象中的Channel通道
FileChannel inChannel = aFile.getChannel();
//创建一个读数据缓冲区对象,其实就是申请一块内存
ByteBuffer buffer = ByteBuffer.allocate(512);
//将Channel中的数据读取到申请的buffer中
intbytesReadCount = inChannel.read(buffer);
//一直读取文件,直到读完文件全部内容
while(bytesReadCount != -1) {
//读取到的文件字节大小
System.out.println("count:" + bytesReadCount);
//Buffer有两种模式,写模式和读模式。在写模式下调用flip()之后,Buffer从写模式变成读模式。(下节讲Buffer)
buffer.flip();
//如果buffer中还有数据,则处理数据
while(buffer.hasRemaining()) {
System.out.print((char) buffer.get());
//清空缓存,接着读取文件内容
buffer.clear();
bytesReadCount = inChannel.read(buffer);
aFile.close();

喜欢文章记得关注我点赞哟,感谢支持!重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!

相关文章
|
8月前
|
存储 编解码 移动开发
技术笔记:NIO流—理解Buffer、Channel概念和NIO的读写操作
技术笔记:NIO流—理解Buffer、Channel概念和NIO的读写操作
51 1
|
9月前
|
消息中间件 缓存 架构师
复习这份美团架构师的Java核心面试宝典,我四面阿里拿下offer
怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习 他是如何拿下阿里等大厂的offer的呢,今天分享他的秘密武器,美团资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。
|
9月前
|
缓存 网络协议 Java
📌 Java NIO Channel
Java NIOChannel和传统的流相似,但是也存在一些差异: • 在同一个Channel通道中,既可以进行 读操作 也可以进行 写操作,但是 流 只能进行 读 或者 写 其中一种操作。 • Channel通道可以进行异步读写。 • Channel可以从 Buffer中进行读写操作。将数据从Channel通道读取到Buffer缓冲区,并将数据从Buffer缓冲区写入Channel通道。
|
9月前
|
设计模式 NoSQL 算法
985、211毕业一年,面试八家大厂,四面拿美团offer(Java后端)
本人三年开发,985硕士,211本科,专业都是软件工程,一直投的是Java后台开发,只投过一次网易的测试,技术不是太牛,但是比较努力。实验室没有项目,so项目经验是0,在去年这个时候看到实验室师兄找工作的艰难,因此开始复习的时间比较早。
|
9月前
|
设计模式 算法 NoSQL
Java开发三年四面字节跳动复习一个月斩获offer,寒冬并不可怕
目前互联网行业形势越来越严峻,我接连投递了很多的简历,得到的回复却是寥寥无几,索性好好复习了大概一个半月的样子,挑战字节跳动成功!!接下来分享我在字节面试遇到的面试题,欢迎大家文末留言与我一起讨论!
|
9月前
|
存储 网络协议 Java
NIO - 基础入门之通道和缓冲区
NIO - 基础入门之通道和缓冲区
101 0
|
安全 Java 程序员
金三银四面试题 -java数据结构(二)
金三银四面试题 -java数据结构(二)
66 0
|
存储 安全 Java
金三银四面试题 -java数据结构(一)
金三银四面试题 -java数据结构
73 0
|
设计模式 NoSQL 算法
985、211毕业一年,面试八家大厂,四面拿美团offer(Java后端)
本人三年开发,985硕士,211本科,专业都是软件工程,一直投的是Java后台开发,只投过一次网易的测试,技术不是太牛,但是比较努力。实验室没有项目,so项目经验是0,在去年这个时候看到实验室师兄找工作的艰难,因此开始复习的时间比较早。
|
设计模式 算法 NoSQL
Java开发三年四面字节跳动复习一个月斩获offer,寒冬并不可怕
目前互联网行业形势越来越严峻,我接连投递了很多的简历,得到的回复却是寥寥无几,索性好好复习了大概一个半月的样子,挑战字节跳动成功!!接下来分享我在字节面试遇到的面试题,欢迎大家文末留言与我一起讨论!

热门文章

最新文章