java I/O(Input/Output)学习——java.io理解及作用

声明:此文为到处摘录的..为我所用..闲人莫来起哄
1.什么是IO
   .IO(Input/Output)是计算机“输出/输出”的接口。
对流的一个形象的比喻:

   IO流就相当与我们日常生活中的管道,我们通过管道来把水引到用户,通过管道把石油输送到大罐.同样,我们利用流来从硬盘的文件中读数据到你的程序中,利用流来写数据到硬盘的文件
文件流 缓冲流 数据流 转换流 Print流 Object流正是为了实现这些功能的不同的类,他们具体包含了实现这些功能的方法
但如果每次都要从硬盘读取一个字节数据或写1个字节数据到硬盘,那就对硬盘损害太大了,比如电驴就损害硬盘.
解决办法:在内存中建立一个缓冲区(buffer),读一次硬盘就把缓冲区装满,然后你就可以从缓冲区读取数据,写数据的时候,先在内存中把数据写到缓冲区,写满,然后把数据一次性地从缓冲区写到硬盘.这样对硬盘的访问次数大大减少了.
缓存要交换的数据:就是读数据的时候把数据一次性读到缓冲区和写数据的时候先把数据写到缓冲区的意思
buffer是在内存中是通过字节数组实现的

   .Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。
   .Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。此外,Java也对块传输提供支持,在核心库java.nio中采用的便是块IO。流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。
  .Java IO模型:Java的IO模型设计非常优秀,它使用Decorator模式,按功能划分Stream,你可以动态装配这些Stream,以便获得你需要的功能。
   例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和 BufferedInputStream。
   Java的IO体系分Input/Output和Reader/Writer两类,区别在于Reader/Writer在读写文本时能自动转换内码。基本上,所有的IO类都是配对的,即有XxxInput就有一个对应的XxxOutput。Java IO教程假如您对Decorator模式非常了解,就能轻易地看出Java的IO类结构:根接口是 InputStream/OutputStream,充当数据源的IO类有 FileInputStream/FileOutputStream,ByteArrayInputStream /ByteArrayOutputStream等,充当装饰功能的IO类有BufferedInputStream /BufferedOutputStream,DataInputStream/DataOutputStream等,它们都是继续装饰接口 FilterInputStream/FilterOutputStream。使用IO时,首先创建一个数据源IO,然后根据需要的功能创建装饰类IO,其构造函数的参数为已创建的数据源IO。我们以创建一个具有缓冲的文件输入流为例,假定需要从磁盘读取文件 “C:log.txt”:    
    // 创建一个FileInputStream:   
 FileInputStream fileInput = new FileInputStream("C:\log.txt");    
    // 创建一个BufferedInputStream:    
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);    
  // 现在得到的bufferedInput即是具有缓冲的文件输入流或者进一步简写如下:    
  InputStream input = new BufferedInputStream(
                                      new FileInputStream("C:\log.txt")); 
   
  // 现在得到的input即是具有缓冲的文件输入流    在您对Java的IO有了总体了解后,我们推荐您看看教程IntrodUCtion to Java I/O和I/O: Reading and Writing。    Java NIO编程    NIO提供了对块IO的支持,使用块IO的好处是效率更高,而且Java的NIO将直接调用操作系统提供的许多高级IO接口,支持块传输,读写锁定,异步IO等功能,效率非常高。NIO的编程模型是通道和缓冲区,推荐您阅读Getting started with new I/O(中文)。 

你可能感兴趣的:(java,设计模式,数据结构,编程,c)