zoukankan      html  css  js  c++  java
  • 二 Channel

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

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

    Channel实现类

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

    基本的Channel示例

    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class FileChannelDemo{
        public static void main(String[] args) throws Exception {
            RandomAccessFile rFile  = new RandomAccessFile("D:\data.txt","rw");
            FileChannel inChannel = rFile.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.println((char)buf.get());
                }
                buf.clear();
                bytesRead = inChannel.read(buf);
            }
            rFile.close();
        }
    
    }

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

    转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(二) Channel

  • 相关阅读:
    MySQL sys Schema 简单介绍-2
    dubbo服务+Spring事务+AOP动态数据源切换 出错
    sql 查询优化
    spring事务-说说Propagation及其实现原理
    Redis 分布式锁
    三、操作符
    二、一切皆是对象
    一、对象导论
    SpringMVC工作原理
    数据库性能优化策略
  • 原文地址:https://www.cnblogs.com/gudulijia/p/6417683.html
Copyright © 2011-2022 走看看