
Java NIO
福州司马懿
大家如果觉得文章有帮助,给我个关注。谢谢大家 (+_+),失业了球介绍工作
展开
-
Java NIO —— 用 Path 取代 File
Java7中文件IO发生了很大的变化,专门引入了很多新的类:import java.nio.file.DirectoryStream;import java.nio.file.FileSystem;import java.nio.file.FileSystems;import java.nio.file.Files;import java.nio.file.Path;import java原创 2017-02-24 16:48:46 · 2224 阅读 · 0 评论 -
Java BIO、NIO、AIO(NIO.2) 区别
转自 http://stevex.blog.51cto.com/4300375/1284437先来个例子理解一下概念,以银行取款为例:同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API转载 2016-12-06 10:36:42 · 1383 阅读 · 0 评论 -
Java NIO —— Selector(用于SocketChannel)
使用Selector的原因Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都要占用原创 2016-12-02 17:15:49 · 6627 阅读 · 1 评论 -
Java NIO —— TCP套接字(ServerSocketChannel & SocketChannel)
package com.demo.test;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;im原创 2016-12-02 15:13:29 · 1982 阅读 · 0 评论 -
Java NIO —— 管道(Channel)
管道的定义在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为:限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不像文件那样不加检验地增长。使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的w原创 2016-12-01 20:01:00 · 1538 阅读 · 0 评论 -
Java NIO——与传统IO文件复制的效率比较(channel.transferTo、Files.copy 、channel.write)
IO与NIO操作效率对比(网上的说法千篇一律,99%都是错的,没经过自己的验证,正确的解释如下)复制文件的情况: 注意:Files.copy和传统IO代码基本一样,只是它开辟的缓冲区大小较大,为8192(基本是缓冲区开的越大越快,但是也吃内存)当缓冲区(<1024)和数据量比较小(<10KB)时,传统IO 最为高效 效率上:传统IO > channel.transferTo > Files.c原创 2016-10-18 12:29:56 · 9504 阅读 · 2 评论 -
Java NIO —— Buffer(缓冲区)
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区。注意:Buffer是非线程安全类。capacity一旦初始化后就不会改变,其值一直为常量。在使用中我们一般使用Buffer的抽象子类ByteBuffer.allocate()方法,实际上是生成ByteArrayBuffer类。(1)Buffer中定义的变量含义/** * <code>UNSET_MARK</code> means原创 2016-08-18 16:46:11 · 3803 阅读 · 0 评论