zoukankan      html  css  js  c++  java
  • JAVA I/O系统

    一、流的分类

    1.按照方向分为:

    (1)输入流:从数据源读取数据到程序中。只能从中读取数据,不能向其中写入数据。IO包中的输入流都继承自抽象类InputStream或Reader。

    (2)输出流:经数据从程序写入数据目的地。只能从中写入数据,而不能从中读取数据,IO包中的输出流都继承自抽象类OutputStream和Writer。

    在I/O 库中的每个输入流都可以找到对应的输出流。

    2.按照处理数据的最小单位不同分为:

    (1)字节流:字节流是一byte为最小单位进行数据传送,io包中的字节流都继承自抽象类InputStream或OutputStream.

    (2)字符流:字符流是以char为最小单位进行数据传送。io包中的字符流都是继承自抽象类Reader或者Writer。

      I/O库做出这种区分是为了满足处理文字性数据的需要。byte是8位的,char是16位的。在JAVA中,各种语言文字都是以Unicode形式编码,Unicode编码是基于16位的char,所以在读写文字性的数据时通过字符流会更有效率、更方便。而一些二进制数据的读写,比如图像、声音等,则仍必须通过字节流来完成。

      字节流的类名以InputStream或OutputStream结尾,字符流的类名以Reader或Writer结尾。字节流对应的内存变量类型是byte[],字符流对应的内存变量类型是char[]。

    3.按照流的功能分为:

    (1)节点流:节点流是可以直接从或者向一个特定的数据源读写数据的流。也成为低级流。

    从InputStream或Reader派生的类都有一个基本的read()方法,用于读取单一的字节或者字节数组;对所有从OutputStream或Writer派生的类都有一个基本的write()方法,用于写入单一的字节或者整个字节数组。

    (2)处理流:处理流不直接连接到设备,而是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的读写功能,也成为高级流。

    区分高级流和低级流:查看该类的构造器,如果类的构造器带有一个已存在的流作为参数,那么就是高级流,否则就是低级流。

     

    I/O操作步骤:

    (1)建立流:根据数据源和具体操作选择流,然后建立流。创建内存到数据源之间的数据通道,以传输数据。

    (2)操作流:将数据读取到内存,或将内存中的数据写入数据源。

    (3)关闭流:流操作结束后,释放所有与该流相关联的系统资源。

    二、文件类

      java.io包中的File类提供了管理磁盘文件和目录的基本功能。我们可以将一个File对象看成是代表一个文件或目录的名称和位置的字符串。File类有四个构造方法:

    public File(String pathname):创建一个与指定路径名关联的File对象。

    public File(String parent,String child):使用指定参数创建一个File对象。参数parent代表一个目录,参数child代表在parent中的子目录或文件。

    public File (File parent,String child):与上一个相同,除了目录是用一个File对象而不是一个字符串来表示。

    public File(URI uri):使用给定的java.net.URI对象创建一个File对象。URI是统一资源标识符,一个文件的URI是“File:///目录/文件名”格式。

     

             因为File对象类似于一个字符串,只代表了一个文件或者目录的路径名,所以即使指定的文件或目录不存在,这些构造器也能成功执行。

     

    三、字节流

      字节流用于处理二进制文件。所有字节流都继承于抽象类InputStream和OutputStream两个父类。其中InputStream为读取字节流的父类,OutputStream为写入字节流的父类  

    1.低级字节流 

    根据输入和输出设备或数据源分为三类:

    (1)对二进制文件进行读写操作的FileInputStream和FileOutputStream类,其数据源是磁盘文件。

    (2)对内存缓冲区的字节数组进行读写操作的ByteArrayInputStream和ByteArrayOutputStream类,其数据源是内存中的字节数组。

    (3)对线程管道进行读写操作的PipedInputStream和PipedOutputStream类,其数据源是线程管道。                      

    2.高级字节流

      高级字节流对低级字节流进行了封装,并有许多功能的扩展。

    (1)字节缓冲流

    BufferedInputStream和BufferedOutputStream可以为InputStream和OutputStream类的对象增加缓冲区功能。BufferedInputStream的数据成员b是一个字节数组默认为2048个字节。当读取数据源时,BufferedInputStream会尽量b填满。当使用read()方法时,实际上是先读取数据成员b的数据而不是直接读取数据源。当b中的数据不足时,才会再实现给定的InputStream对象的read()方法,从指定的设备中提取数据。

    BufferedOutStream的数据成员是一个字节数组,默认为512字节。当使用write()方法,会先将数据写至数据成员b中,当b已满时才会实现给定的OutputStream对象的write()方法,将b数据写至目的地,而不是每次都对目的地作写入的动作。

     

    四、字符流

      字符流用于处理文本文件。所有字符流都继承于抽象类Reader和Writer两个父类。其中Reader为读取字符流的父类,Writer为写入字符流的父类。

    Reader与InputStream相似,用于从流中读取数据,Reader是以字符为单位读取数据。

    Writer和OutputStream相似,用于从流中写入数据,Writer是以字符为单位写入数据。

     

  • 相关阅读:
    【C语言】用"I love you!"打印心形
    android js与控件交互初探。
    android 调用webview控件,为逆向h5app做准备
    git命令
    kdevelp 导入makefile工程
    解决vmvare关闭过慢
    用python.twisted.logfile每天记录日志,并用不记录stdout中的内容
    关于bjam编译自己模块出错的问题
    俄罗斯黑客在美国监狱中获刑4年,到底是什么原因?
    美国的电信巨头T-Mobile今天披露了另一起数据遭黑客泄露事件
  • 原文地址:https://www.cnblogs.com/fengxiaopiaoer/p/5397252.html
Copyright © 2011-2022 走看看