码迷,mamicode.com
首页 > 编程语言 > 详细

Java的IO体系

时间:2014-08-18 00:08:03      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:java   使用   io   strong   文件   数据   ar   cti   

  现在返回来看之前一直觉得迷迷糊糊的IO这一部分,顿时真的觉得阔然开朗。所以现在觉得自学的顺序应该是这样的,先过一遍基本的知识体系,然后通过实践、练习和项目来巩固,最后再回头复习这些知识点,真的会有不一样的体会。下面稍稍对自己了解到Java的IO体系做一个小小总结。

1.Java流式输入/输出的原理:
  在Java程序中,对于数据的输入/输出操作都是以流(stream)的方式进行的,JDK提供了各种各样的流,可以获取不同种类的数据,程序可以通过标准的方法输入或输出数据。

2.Java流的分类:
  java.io包中定义了多个流类型(类或者抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:
    <1.按数据流的方向的不同可以分为输入流和输出流(这里的方向都是相对于程序而言)。
    <2.按处理数据单位的不同可以分为字节流和字符流。
    <3.按照功能不同可以分为节点流和处理流。

java.io提供了所有流类型都分别继承了以下四个抽象类的类型:
  字节流:InputStream、OutputStream
  字符流:Reader、Writer
值得注意的是以上四个类都是抽象类,不能直接创建实体。

3.节点流和处理流:
  节点流可以从一个特定的数据源(节点)读写数据(如:文件、内存)。
  处理流是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

  常见的节点流可以根据上面提到的四个抽象类分为四类:
   <1.InoutStream:继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit),主要有FileInputStream、ByteArrayInputStream、StringBufferInputStream。
   <2.OutputStream:继承自OutputStream的流都是用于向程序中输出数据,且数据的单位为字节(8bit),主要有FileOutputStream、ByteArrayOutputStream。
   <3.Reader:继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit),主要有CharArrayReader、StringReader、FileReader。
   <4.Writer:继承自Writer的流都是用于向程序中输出数据,且数据的单位为字符(16bit),主要有CharArrayWriter、StringWriter、FileWriter。

   处理流的类型(分类方式同上面的节点流一样):
    <1.InoutStream:主要有BufferedInputStream、FilterInputStream、ObjectInputStream、DataInputStream。
    <2.OutputStream:主要有BufferedOutputStream、FilterOutputStream、ObjectOutputStream、DataOutputStream、printStream。
    <3.Reader:主要有BufferedReader、FilterReader、InputStreamReader。
    <4.Writer:主要有BufferedWriter、FilterWriter、OutputStreamWriter、PrintWriter。

下面将详细介绍各个处理流。

4.缓冲流:
  缓冲流套接在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。
  JDK提供的缓冲流主要有四种:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream。
  对于输出的缓冲流,写出的数据会现在内存中缓存,使用fluse()方法将会使内存中的数据立刻写出。
5.转换流: InputStreamReader、OutputStreamWriter用于字节数据到字符数据的转换,分别需要和InputStream、OutputStream进行套接,转换流在构造的时候可以指定其编码集合。 例如: InputStream isr = new InputStreamReader(System.in,"ISO8859-1"); 注意:值可以进行字节到字符的转换,而不存在字符到字节的转换。 System.in(标注输入)是一个InputStream子类的实体。而System.out是PrintStream类的实体。System提供了setOut()可以设置输出的位置。 6.数据流: DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它们提供了可以存取与机器无关的Java原始类型数据的方法,如:int、double等类型(大于16bit的的大小)。 7.Print流: PrintWriter、PrintStream都属于输出流,分别使用与字符和字节。 PrintWriter、PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息,他们都有自动flush的功能。 8.Object流: ObjectInputStream、ObjectOutputStream直接将Object对象写入或读出。 需要注意的是这个Object类需要实现序列化Serializable接口,Serializable是一个标志性的接口,其中没有具体的方法;此外其中声明了transient关键字的属性将不被进行序列化;externalizable接口继承了Serializable,其中的方法可以让用户自己定义序列化的方式。

 

Java的IO体系,布布扣,bubuko.com

Java的IO体系

标签:java   使用   io   strong   文件   数据   ar   cti   

原文地址:http://www.cnblogs.com/mosquito-woo/p/3918494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!