学习日记-io流

------- android培训java培训、期待与您交流! ----------

io流

java中流就是字节从源到目的地的运行的轨迹,次序是有意义的, 字节会按照次序进行传递。在学习过程之中我发现在这一块用到的类很多,不容易记住,所以就自己通过查资料和请教高手总结了一下其中的一些类,并给出其在什么情况下使用,现在与大家进行分享。

我们将IO流的分类有以下三种
1 Input/Output
2 基础流/过滤流
3 字节流/字符流

(1)Input/Output这个比较简单,就是输入流,输出流。

(2)基础流/过滤流
基础流是最底层的流,直接从文件,网络中读取内容,或写入内容。比如File...,ByteArray...,piped...,Sequece...。过滤流是以其他基础流,进行封装。比如Data...,Buffered...,LineNumber,pushback...。

(3)字节流/字符流
字节流:读取字节,010101,一般以stream结尾。字符流:读取字符,文字, 一般以er结尾。信息需要保密的时候用字节流操作。无需保密的,比如配置信息等,可以用字符流操作。

以字节为导向的stream包括下面几种类型:

输入
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream
:把一个String对象作为InputStream
3) FileInputStream
:把一个文件作为InputStream,实现对文件的读取操作

4) PipedInputStream
:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream
:把多个InputStream合并为一个InputStream

输出
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream
:把信息存入文件中
3) PipedOutputStream
:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream
:把多个OutStream合并为一个OutStream
以字符为导向的
stream
Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream

写入信息。以Unicode字符为导向的stream包括下面几种类型:
输入

1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader
:与StringBufferInputStream对应
3) FileReader
:与FileInputStream对应
4) PipedReader
:与PipedInputStream对应
输出

1) CharArrayWrite:与ByteArrayOutputStream对应
2) StringWrite
:无与之对应的以字节为导向的stream
3) FileWrite
:与FileOutputStream对应

4) PipedWrite
:与PipedOutputStream对应
以字符为导向的stream基本上都有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,只是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream
作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。
两种不现导向的stream之间的转换
InputStreamReader
OutputStreamReader:把一个以字节为导向的stream转换成一个以字
符为导向的stream
 stream
添加属性
“为stream添加属性”的作用
运用上面介绍的Java中操作IOAPI,我们就可完成我们想完成的任何操作了。但通过FilterInputStreamFilterOutStream的子类,我们可以为stream添加属性。下面以一个例子
来说明这种功能的作用。
如果我们要往一个文件中写入数据,我们可以这样操作:
FileOutStream fs = new FileOutStream(
test.txt);
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如

果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”
的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStreamFilterOutStream的子类,为FileOutStream添加我们所需要的功能。
 FilterInputStream
的各种类型用于封装以字节为导向的InputStream
1) DataInputStream
:从stream中读取基本类型(intchar等)数据。

2) BufferedInputStream
:使用缓冲区
3) LineNumberInputStream
:会记录input stream内的行数,然后可以调用getLineNumbe
r()
setLineNumber(int)
4) PushbackInputStream
:很少用到,一般用于编译器开发用于封装以字符为导向的
InputStream
1)
没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader

否则使用DataInputStream
2) BufferedReader
:与BufferedInputStream对应

3) LineNumberReader
:与LineNumberInputStream对应
4) PushBackReader
:与PushbackInputStream对应
 FilterOutStream
的各种类型
 
用于封装以字节为导向的OutputStream
1) DataIOutStream
:往stream中输出基本类型(intchar等)数据。

2) BufferedOutStream
:使用缓冲区
3) PrintStream
:产生格式化输出
 
用于封装以字符为导向的OutputStream
1) BufferedWrite

2) PrintWrite

 RandomAccessFile
1)
可通过RandomAccessFile对象完成对文件的读写操作

2)
在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3)
可以直接跳到文件中指定的位置

------- android培训java培训、期待与您交流! ----------

 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值