Java new io
2013-12-03 23:39
295 查看
Java新IO
BufferedReader它的一个特征:当BufferedReader读取输入流中的数据时,如果没有读到有效数据时,程序将在此处阻塞该线程的执行(使用InputStream的read方法从流中读取数据时,如果数据源中没有数据,它也会阻塞该线程),也就是前面介绍的输入、输出流都是阻塞式的输入、输出。不仅如此,传统的输入、输出流都是通过字节的移动来处理的(即使我们可以不直接去处理字节流,但底层的实现还是依赖于字节处理),也就是说面向流的输入/输出系统一次只能处理一个字节,因此面向流的输入/输出系统通常效率不高。
从JDK1.4开始,Java提供了一系列改进的输入/输出处理的新特性,这些功能被称为新I/O(New I/O),新增了许多用于处理输入/输出的类,这些类都被放在java.nio包以及子包下,并且对原java.io包中的很多类似NIO为基础进行了改写,新增了满足新IO的功能。
Java新IO概述
新IO和传统的IO有相同的目的,都是用于进行输入/输出功能,但新IO使用了不同的方式来处理输入/输出,新IO采用内存映射文件的方式来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了(这种方式模拟了操作系统上的虚拟内存的概念),通过这种方式来进行输入/输出比传统的输入/输出要快得多。
Java中NIO相关的包如下:
1、java.nio包:主要提供了一些和Buffer相关的类。
2、java.nio.channels包:主要包括Channel和Selector相关的类。
3、java.nio.charset包:主要包含和字符集相关的类。
4、java.nio.channels.spi包:主要包含提供Channel服务的类。
5、java.nio.charset.spi包:主要包含提供字符集服务的相关类。
Channel(通道)和Buffer(缓冲)是新IO中的两个核心对象,Channel是对传统输入/输出系统中的模拟,在新IO系统中所有数据都需要通过通道传输;Channel与传统的InputStream、OutputStream最大的区别在于它提供了一个map方法,通过该map方法可以直接将“一块数据”映射到内存中。如果说传统的输入/输出系统是面向流的处理,而新IO则是面向块的处理。
Buffer可以被理解成一个容器,它的本质是一个数组,发送到Channel中的所有对象都必须首先放到Buffer中,而从Channel中读取的数据也必须先读到Buffer中。此处的Buffer有点类似于前面我们介绍的“竹筒”,但该Buffer既可以像前面那样一次、一次去Channel中取水,也允许使用Channel直接将文件的某块数据映射成Buffer。
除了Channel和Buffer之外,新IO还提供了用于将UNICODE字符串映射成字节序列以及逆映射操作的Charset类,还提供了用于支持非阻塞式输入/输出的Selector类。
BufferedReader它的一个特征:当BufferedReader读取输入流中的数据时,如果没有读到有效数据时,程序将在此处阻塞该线程的执行(使用InputStream的read方法从流中读取数据时,如果数据源中没有数据,它也会阻塞该线程),也就是前面介绍的输入、输出流都是阻塞式的输入、输出。不仅如此,传统的输入、输出流都是通过字节的移动来处理的(即使我们可以不直接去处理字节流,但底层的实现还是依赖于字节处理),也就是说面向流的输入/输出系统一次只能处理一个字节,因此面向流的输入/输出系统通常效率不高。
从JDK1.4开始,Java提供了一系列改进的输入/输出处理的新特性,这些功能被称为新I/O(New I/O),新增了许多用于处理输入/输出的类,这些类都被放在java.nio包以及子包下,并且对原java.io包中的很多类似NIO为基础进行了改写,新增了满足新IO的功能。
Java新IO概述
新IO和传统的IO有相同的目的,都是用于进行输入/输出功能,但新IO使用了不同的方式来处理输入/输出,新IO采用内存映射文件的方式来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了(这种方式模拟了操作系统上的虚拟内存的概念),通过这种方式来进行输入/输出比传统的输入/输出要快得多。
Java中NIO相关的包如下:
1、java.nio包:主要提供了一些和Buffer相关的类。
2、java.nio.channels包:主要包括Channel和Selector相关的类。
3、java.nio.charset包:主要包含和字符集相关的类。
4、java.nio.channels.spi包:主要包含提供Channel服务的类。
5、java.nio.charset.spi包:主要包含提供字符集服务的相关类。
Channel(通道)和Buffer(缓冲)是新IO中的两个核心对象,Channel是对传统输入/输出系统中的模拟,在新IO系统中所有数据都需要通过通道传输;Channel与传统的InputStream、OutputStream最大的区别在于它提供了一个map方法,通过该map方法可以直接将“一块数据”映射到内存中。如果说传统的输入/输出系统是面向流的处理,而新IO则是面向块的处理。
Buffer可以被理解成一个容器,它的本质是一个数组,发送到Channel中的所有对象都必须首先放到Buffer中,而从Channel中读取的数据也必须先读到Buffer中。此处的Buffer有点类似于前面我们介绍的“竹筒”,但该Buffer既可以像前面那样一次、一次去Channel中取水,也允许使用Channel直接将文件的某块数据映射成Buffer。
除了Channel和Buffer之外,新IO还提供了用于将UNICODE字符串映射成字节序列以及逆映射操作的Charset类,还提供了用于支持非阻塞式输入/输出的Selector类。
相关文章推荐
- NIO简介-Java New IO
- hadoop错误Ignoring exception during close for org.apache.hadoop.mapred.MapTask$NewOutputCollector@17bda0f2 java.io.IOException Spill failed
- 用Java的New IO开发网络协议
- 尚硅谷java学习笔记——NIO(New IO)
- solr 4.0 SolrException: Error opening new searcher java.io.FileNotFoundException 问题解决方案
- [Java 12 IO] PrintStream 打印流 new PrintStream(new FileOutputStream(new File("/home。。
- [Java 12 IO] PrintStream 打印流 new PrintStream(new FileOutputStream(new File("/home。。
- 尚硅谷java——NIO(New IO)
- Java IO 文件读取问题记录(class.getResourceAsStream 和 new FileInputStream)
- java io中CreateNewFile()和createTempFile()
- 用Java的New IO开发网络协议
- 流 JAVA IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in))
- New IO JAVA1.4特性
- NIO - java new io2 since jdk7
- New IO JAVA1.4特性
- Java中的IO File类创建名字new.txt文件 是否成功创建问题
- 多线程高性能 7x24小时 Java NewIO 程序 小结
- 异步同步与阻塞非阻塞 及java IO、java newIO、java AIO之间的关系
- java IO ——new I/O包
- 流 JAVA IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in))