`

黑马程序员--java基础复习--IO--流的操作规律和几个特殊的IO流

 
阅读更多

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------

对数据的操作是IO最常用的功能,在使用流的时候是有一定规律的:

  流操作规律
(1)明确源和目的
  • 源:输入流。InputStream Reader
  • 目的:输出流。OutputStream Writer

(2)操作的数据是否是纯文本。

  • 是:字符流。
  • 不是:字节流。

(3)当体系明确后,在明确要使用哪个具体的对象设备。

  • 通过设备来进行区分。
  • 源设备:内存,硬盘,键盘。
  • 目的设备:内存,硬盘,控制台。

这个步骤基本上适用于所有的流操作,

  • 举例1:将一个文本文件中数据存储到另一个文件中,即复制文件。、
    • 源:读取源,使用读取流。InputStream,Reader。
    • 源是不是文本:是,使用Reader。
    • 源设备:硬盘(上的一个文件)。Reader中操作文件的是FileReader。
    • 是否需要提高效率:是,加入Reader缓冲区 BufferedReader。
    • 目的:写入到目的地,使用写入流。OutputStream,Writer。
    • 目的是不是纯文本:是,使用Writer。
    • 目的设备: 硬盘(上的一个文件)。 Writer中操作文件的是FileWriter 。
    • 是否需要提高效率:是,加入Writer 缓冲区 BufferedWriter 。
  • 举例2:将键盘录入的数据保存到一个文件中。
    • 源: InputStream,Reader。
    • 源是不是文本:键盘录入的是字符,是文本,Reader。
    • 源设备:键盘,对应的对象是System.in。
      • System.in对应的是InputStream字节流,为了操作键盘的文本数据方便,转成字符流操作字符串最方便,所以把字节流转成字符流。使用Reader体系中的的InputStreamReader。
    • 源需要提高效率吗?需要,用BufferedReader。
    • 目的: OutputStream,Writer。
    • 是否是纯文本?是, Writer。
    • 设备:键盘(一个文件),使用FileWriter。
    • 需要提高效率吗?是,BufferedWriter。

在IO里边还有两个很有用的转换流,InputStreamReader和OutputStreamWriter,这两个流可以使字节流和字符流之间相互转换

  • InputStreamReader  可以将指定源的字符数据按照指定的编码表解码成字节数据,然后读取出来
  • OutputStreamWriter  可以将需要写入目的地的字符数据按照指定的编码表存入。

结合转换流,基本上对数据的所有读取写出操作都能实现了,流的对象是非长多的,而且针对相同的一个操作不同的流对象都能通过不同的途径完成,只是复杂程度与效率高低不一样。那么我们还是要熟悉一些常用的流及他们能做的事:

  • FileInputStream、FileOutputStream  可以对任意类型文件进行读取和写入的类,要配合其他缓冲流才能提高效率
  • FileReader、FileWriter  只能对纯文本文件进行操作,
  • BufferedReader、BufferedWriter  包装了FileReader和Filewriter的功能,并增加了缓冲区和一些方便的方法比方说readLine和newLine(),提高效率,方便调用。
  • ByteArrayInputStream  可以读取一个字节数组中的数据
  • ByteArrayOutputStream 在内存中创建一个可以自动增长的缓冲数组,可以通过toByteArray() 获得其装载的数据
  • DataInputStream、DataOutputStream  可以直接写入或者读取java的基本数据类型,还可以读取写入UTF编码格式的字符串。
  • LineNumberReader  在读取数据时,可以读取到文本数据的行数,并认为设置行号,还有一个lineNumberInputStream类,这个类是基于所读取的数据是可以充分转换成字符的。
  • ObjectInputStream、ObjectOuptPutStream 可以将一个类对象写入到文件里边,然后读取出来,被操作的对象必须是实现了serializable接口的,并且私有的和被trainsient以及static修饰的成员是不可悲序列化的。
  • PrintStream  可以指定打印时对字节数据进行解码的字符集。并且提供了自动刷新功能
  • PrintWriter  与PriteStream用法一样,但是PrintWriter用的字符集是系统默认的,不能指定字符集。

-------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

1
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics