Java NIO系列教程(二) Channel

来源:互联网 发布:网络女主播视频种子 编辑:程序博客网 时间:2024/06/05 06:02

原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一

Java NIO的通道类似流,但又有些不同:

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

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:


Channel的实现

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

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel 从文件中读写数据。

DatagramChannel 能通过UDP读写网络中的数据。

SocketChannel 能通过TCP读写网络中的数据。

ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

基本的 Channel 示例

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

01RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt""rw");
02FileChannel inChannel = aFile.getChannel();
03 
04ByteBuffer buf = ByteBuffer.allocate(48);
05 
06int bytesRead = inChannel.read(buf);
07while (bytesRead != -1) {
08 
09System.out.println("Read " + bytesRead);
10buf.flip();
11 
12while(buf.hasRemaining()){
13System.out.print((char) buf.get());
14}
15 
16buf.clear();
17bytesRead = inChannel.read(buf);
18}
19aFile.close();

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 楼上弄的声音大怎么办 楼上太吵楼下人怎么办 严重多囊卵巢该怎么办 被医院骗了应该怎么办 四维胎儿不配合怎么办 孕甲状腺tsh有点偏高怎么办 20岁得胃癌了怎么办 洗鼻涕耳朵堵了怎么办 胡振兴预约不上怎么办 玻尿酸打歪了怎么办 隆鼻后鼻子胀疼怎么办 鼻子做的太高了怎么办 感觉被医院骗了怎么办 中风后嘴巴歪了怎么办 孩子中风嘴歪了怎么办 胃疼怎么办简单的偏方 胃痛怎么办简单有效的方法 急用5000元怎么办又没信用卡 我真的不想活了怎么办 不想活了怎么办很累 毕业推荐表丢了怎么办 想去英国留学该怎么办 三个人跟团住宿怎么办 跟团被强制消费怎么办 苹果6s手机黑屏怎么办 胸闷喘不过气来怎么办 经常胸闷气短呼吸困难怎么办 沙漠玫瑰根软了怎么办 誉峰国际的业主怎么办 20岁头发一直掉怎么办 考研报名点满了怎么办 便池堵了怎么办最简单 在皇城老妈生病怎么办 智齿烂了很痛怎么办 苹果4id密码忘了怎么办 前海医院出院后怎么办 拔完智齿脸肿了怎么办 补牙的材料掉了怎么办 医院预约号满了怎么办 华西医院卡掉了怎么办 体检前喝了水怎么办