java io
- 字节流和字符流
Byte Streams | Character Streams |
---|---|
InputStream | Reader |
OutputStream | Writer |
-
读/写数据的逻辑
open a stream
while more information
read/write information
close the stream -
节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域
-
过滤流:使用节点流作为输入或输出。过滤流时使用一个已存在的输入流或输入流连接创建的
-
java.io中最核心的一个概念是流(Stream),面向流的编程。java中,一个流要么是输入流,要么是输出流,不肯同时既是输入流又是输出流
-
java.nio中拥有3个核心概念:Selector,Channel与Buffer。在java.nio中,我们是面向块(block)或是缓冲区(buffer)编程的。Buffer本身就是一块内存,底层实现上,他实际上是一个数组。数据的读写都是通过Buffer来实现的。
除了数据之外,Buffer还提供了对于数据的结构化访问,并且可以追踪到系统的读写过程。
- java中的7种原生的数据类型都有各自对应的Buffer类型,如IntBuffer,ByteBuffer,LongBuffer及CharBuffer等等,并没有BooleanBuffer
Channel指的是可以向其写入数据或是从中读取数据的对象,类似于java.io中的Stream
所有数据的读写都是通过Buffer来进行的,永远不会出现直接向Channel写入数据的情况,或是直接从Channel读取数据的情况
与Stream不同的是,Channel是双向的
由于Channel是双向的,因此他能更好地反映出底层操作系统的真是情况;在Linux系统中底层操作系统的通道就是双向的
-
通过NIO读取文件设计3个步骤
1.从FileInputStream获取到FileChannel对象
2.创建Buffer
3.将数据从Channel读取到Buffer中 -
绝对方法和相对方法的含义
1.相对方法:limit值与position值会在操作时被考虑到
2.绝对方法:完全忽略掉limit值与position值
阻塞只会出现在网络通讯中
IO:阻塞的 程序在获取网络数据的时候,如果网络传输传输很慢,就会一直等待,直到传输完为止
nio:非阻塞的 等服务器端把数据加载完后,再去读取 jdk 1.5之后
jdk1.7之后
同步非阻塞 就是只有一个客户端读取
aio 异步非阻塞 可以多个客户端去读取 每一个请求分一个线程
网友评论