大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
成都创新互联公司是专业的桓台网站建设公司,桓台接单;提供成都网站建设、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行桓台网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!这篇文章主要介绍关于java NIO之Channel的简介,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
通道(Channel)是java.nio的第二个主要创新。它们既不是一个扩展也不是一项增强,而是全新、极好的Java I/O示例,提供与I/O服务的直接连接。Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。
channel介绍
通道是访问I/O服务的导管。I/O可以分为广义的两大类别:File I/O和Stream I/O。那么相应地有两种类型的通道也就不足为怪了,它们是文件(file)通道和套接字(socket)通道。我们看到在api里有一个FileChannel类和三个socket通道类:SocketChannel、ServerSocketChannel和DatagramChannel。
通道可以以多种方式创建。Socket通道有可以直接创建新socket通道的工厂方法。但是一个FileChannel对象却只能通过在一个打开的RandomAccessFile、FileInputStream或FileOutputStream对象上调用getChannel( )方法来获取。你不能直接创建一个FileChannel对象。
我们先来看一下FileChannel的用法:
// 创建文件输出字节流 FileOutputStream fos = new FileOutputStream("data.txt"); //得到文件通道 FileChannel fc = fos.getChannel(); //往通道写入ByteBuffer fc.write(ByteBuffer.wrap("Some text ".getBytes())); //关闭流 fos.close(); //随机访问文件 RandomAccessFile raf = new RandomAccessFile("data.txt", "rw"); //得到文件通道 fc = raf.getChannel(); //设置通道的文件位置 为末尾 fc.position(fc.size()); //往通道写入ByteBuffer fc.write(ByteBuffer.wrap("Some more".getBytes())); //关闭 raf.close(); //创建文件输入流 FileInputStream fs = new FileInputStream("data.txt"); //得到文件通道 fc = fs.getChannel(); //分配ByteBuffer空间大小 ByteBuffer buff = ByteBuffer.allocate(BSIZE); //从通道中读取ByteBuffer fc.read(buff); //调用此方法为一系列通道写入或相对获取 操作做好准备 buff.flip(); //从ByteBuffer从依次读取字节并打印 while (buff.hasRemaining()){ System.out.print((char) buff.get()); } fs.close();