缓冲区
fcin.read( buffer ); fcout.write( buffer ); |
第一行将数据从输入通道 fcin
中读入缓冲区,第二行将这些数据写到输出通道 fcout
。
下一步是检查拷贝何时完成。当没有更多的数据时,拷贝就算完成,并且可以在 read()
方法返回 -1 是判断这一点,如下所示:
int r = fcin.read( buffer ); if (r==- 1 ) { break ; } |
最后,在从输入通道读入缓冲区之前,我们调用 clear()
方法。同样,在将缓冲区写入输出通道之前,我们调用 flip()
方法,如下所示
1
2
3
4
5
6
7
8
9
|
buffer.clear(); int r = fcin.read( buffer ); if (r==- 1 ) { break ; } buffer.flip(); fcout.write( buffer ); |
clear()
方法重设缓冲区,使它可以接受读入的数据。 flip()
方法让缓冲区可以将新读入的数据写入另一个通道。
缓冲区内部细节
本节将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor)。
状态变量是前一节中提到的"内部统计机制"的关键。每一个读/写操作都会改变缓冲区的状态。通过记录和跟踪这些变化,缓冲区就可能够内部地管理自己的资源。
在从通道读取数据时,数据被放入到缓冲区。在有些情况下,可以将这个缓冲区直接写入另一个通道,但是在一般情况下,您还需要查看数据。这是使用 访问方法 get()
来完成的。同样,如果要将原始数据放入缓冲区中,就要使用访问方法 put()
。
在本节中,您将学习关于 NIO 中的状态变量和访问方法的内容。我们将描述每一个组件,并让您有机会看到它的实际应用。虽然 NIO 的内部统计机制初看起来可能很复杂,但是您很快就会看到大部分的实际工作都已经替您完成了。您可能习惯于通过手工编码进行簿记 ― 即使用字节数组和索引变量,现在它已在 NIO 中内部地处理了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!