A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

wushiqin

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© wushiqin 初级黑马   /  2018-4-10 09:57  /  1247 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  • 总结一:javaIO的一般使用原则:一、按数据来源(去向)分类:1、是文件:FileInputStream,FileOutputStream,FileReader,FileWriter2、是byte[]:ByteArrayInputStream,ByteArrayOutputStream3、是Char[]:CharArrayReader,CharArrayWriter4、是String:StringBufferInputStream,StringReader,StringWr
  • 总结一:


    java IO的一般使用原则:

    一、按数据来源(去向)分类:

    1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter

    2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream

    3、是Char[]: CharArrayReader, CharArrayWriter

    4、是String: StringBufferInputStream, StringReader, StringWriter

    5、网络数据流:InputStream, OutputStream, Reader, Writer

    二、按是否格式化输出分:

    1、要格式化输出:PRintStream, PrintWriter

    三、按是否要缓冲分:

    1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter

    四、按数据格式分:

    1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类

    2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类

    五、按输入输出分:

    1、输入:Reader, InputStream类型的子类

    2、输出:Writer, OutputStream类型的子类

    六、特殊需要:

    1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter

    2、对象输入输出:ObjectInputStream, ObjectOutputStream

    3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter

    4、合并输入:SequenceInputStream

    5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader



    决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):

    第一,考虑最原始的数据格式是什么:是否为文本?

    第二,是输入还是输出?

    第三,是否需要转换流:InputStreamReader, OutputStreamWriter?

    第四,数据来源(去向)是什么:文件?内存?网络?

    第五,是否要缓冲:bufferedReader (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)

    第六,是否要格式化输出:print?





    总结二:



    首先是java的IO。这破东西可真费事,I/O类库常使用”流(stream)”这种抽象。所谓”流”是一种能生成或接受数据的,代表数据的源和目标的对象。流把I/O设备内部的具体操作给隐藏起来了。 正如JDK文档所显示的,Java的I/O类库分成输入和输出两大部分。所有InputStream和Reader的派生类都有一个基本的,继承下来的,能读取单个或byte数组的read( )方法。同理,所有OutputStream和Writer的派生类都有一个基本的,能写入单个或byte数组的write( )方法。但通常情况下,你是不会去用这些方法的;它们是给其它类用的 ―― 而后者会提供一些更实用的接口。因此,你很少会碰到只用一个类就能创建一个流的情形,实际上你得把多个对象叠起来,并以此来获取所需的功能。Java的流类库之所以会那么让人犯晕,最主要的原因就是”你必须为创建一个流而动用多个对象”。


    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即是具有缓冲的文件输入流

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马