javaNIO javaNIO

### Java NIO与ByteBuffer详解 #### 一、Java NIO简介 Java NIO(New I/O)是Java SE 1.4版本引入的一种新的I/O处理方式,它提供了与传统BIO(Blocking I/O)不同的数据处理机制。NIO的核心组件包括`Channels`、`Buffers`和`Selectors`。与传统的基于流(Stream)的方式相比,NIO采用了基于通道(Channel)和缓冲(Buffer)的方法,能够更高效地处理大量的数据传输任务。 #### 二、ByteBuffer概述 `java.nio.ByteBuffer`是Java NIO中的一个核心类,它主要用于处理字节数据的读写操作。`ByteBuffer`继承自抽象类`Buffer`,并且实现了`Comparable<ByteBuffer>`接口。这使得`ByteBuffer`不仅可以用于数据的存储和传输,还可以用于比较不同缓冲区之间的内容。 #### 三、ByteBuffer基本操作 `ByteBuffer`的基本操作包括: - **allocate**: 分配缓冲区空间。 - **put**: 写入数据。 - **flip**: 准备读取数据。 - **get**: 读取数据。 - **clear**: 清除缓冲区,使其可被重用。 #### 四、代码示例解析 以下是对示例代码的逐行分析: 1. `FileChannel fcIn = new FileInputStream("d:/t.txt").getChannel();` - 创建一个`FileInputStream`对象,并获取对应的`FileChannel`实例,用于从文件`t.txt`中读取数据。 2. `FileChannel fcOut = new FileOutputStream(new File("d:/out_j.txt")).getChannel();` - 创建一个`FileOutputStream`对象,并获取对应的`FileChannel`实例,用于向文件`out_j.txt`写入数据。 3. `ByteBuffer buffer = ByteBuffer.allocate(1024);` - 分配一个1024字节大小的`ByteBuffer`实例。 4. `long t1 = System.currentTimeMillis();` - 获取开始时间。 5. `while (fcIn.read(buffer) != -1) {` - 从`fcIn`中读取数据到`buffer`,直到没有更多数据可读。 6. `buffer.flip();` - 将`buffer`从写模式切换到读模式,为接下来的数据读取做好准备。 7. `fcOut.write(buffer);` - 从`buffer`中读取数据,并写入到`fcOut`。 8. `buffer.clear();` - 清空`buffer`,以便再次使用。 9. `long t2 = System.currentTimeMillis();` - 获取结束时间。 10. `long size = fcIn.size();` - 获取文件大小。 11. `javax.swing.JOptionPane.showMessageDialog(null, size + "字节,耗时" + (t2 - t1 + 1) + "ms.");` - 显示消息对话框,展示文件大小及复制所花费的时间。 #### 五、flip()方法详解 `flip()`方法是`ByteBuffer`中的一个重要方法,用于将缓冲区从写模式切换到读模式。其具体操作如下: - 将`position`设置为`limit`的位置,即之前写入数据的结束位置。 - 将`limit`设置为`capacity`,即缓冲区的最大容量。 - 清除标记(如果有),即`mark`会被设置为`undefined`。 这种操作使得`position`指向了之前写入数据的起始位置,而`limit`指向了缓冲区的末尾,从而可以顺序地读取缓冲区中的数据。 #### 六、ByteBuffer的工作原理 1. **allocate**:通过`ByteBuffer.allocate(size)`创建一个指定大小的缓冲区。 2. **put**:通过`put(byte[] src, int offset, int length)`等方法将数据写入缓冲区。 3. **flip**:通过`flip()`方法准备读取缓冲区中的数据。 4. **get**:通过`get()`系列方法读取缓冲区中的数据。 5. **clear**:通过`clear()`方法清空缓冲区,以便再次写入数据。 通过这种方式,`ByteBuffer`能够高效地管理内存中的数据,提高数据读写的效率。 `ByteBuffer`是Java NIO中非常重要的类之一,它提供了灵活高效的方式来处理字节数据。通过合理利用`ByteBuffer`的各种方法,开发者可以更加高效地进行文件操作或网络通信等相关任务。


























- a273826382012-07-27内容简单易懂,适合初学者的资料。资源不错。

- 粉丝: 39
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 斯坦福大学的机器学习练习_Stanford's Machine Learning Exercises.zip
- SUN-EM是由斯坦陵布什大学计算与电磁学小组开发的基于MATLAB的CEM软件包。_SUN-EM is a MATLA
- 光子集成电路(PIC)的光束传播方法(BPM),在MATLAB中实现,在D中具有有限差分。包括板条波导模式求解器。_Be
- gPB的Damascene CUDA实现的Python和matlab绑定_Python and matlab bindi
- matlab kd_matlab实现对数据建立kd树,并且实现最近邻搜索.zip
- 用于双耳合成的HpTF补偿滤波器,使用Matlab脚本从测量数据中创建滤波器_HpTF compensation fil
- 小程序天气预报.zip
- Taro 3.0 小程序动态加载.zip
- 「易丨记账」—— 一款信用卡账单记账小程序,欢迎 star,thx.zip
- Matlab Kurtogram函数的Python克隆_A Python clone of the Matlab Kur
- MATLAB与ImageJ数据结构和运行时的集成。_MATLAB integration with ImageJ dat
- PX自动驾驶仪的MATLAB接口工具箱。_MATLAB interface toolbox for PX4 autopi
- 一款运行在chrome上的小程序框架。.zip
- CVPR官方Matlab实现OSD_无监督图像匹配和目标发现作为优化。_[CVPR 2019] Official Mat
- 微信小程序商城, 微信小程序微店,fecshop 微信小程序,.zip
- 微信小程序开发之豆瓣同城.zip


