java的IO流

J2se之IO

 1,IO流的概念:

IO流里面有多种流,而本章主要讲java流式的输入/输出原理,java流类的分类,【输出/输入流;常见的节点流和处理流;文件流;缓冲流;数据流;转换流,Print流;Object流】其实我们在理解IO流的概念时可以将它日常化,形象化,就是将流看成是我们的自来水的管子,对于读入可以是将这个流的管子伸向程序源将文件读取出来,写出时相当于在流这个管子头部安装了水龙头,将内容写入,当使用java中的IO包中的方法时就相当于装上水龙头。所以在理解IO流时java中流的概念可以看成水流来理解

2.输入/输出流的分类

(1).Java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:【*按数据流的方向不同可以分为输入流和输出流;*安处理数据单位不同可以分为字节流(安那种0101……输入输出)和字符流;*按照功能不同可以分为节点流和处理流;】

(2).J2SDK所提供的所有流类型位于包java.io内都分别继承自一下四中抽象流类型。将不同的流当成不同的管道来看就比较容易理解,以后讲是输入输出流的时候是站在程序的角度来看待。

            字节流                            字符流

输入流     InputStream                        Reader

输出流     OutputStream                       Writer

 

(3).在写入流里面的良好的习惯是在close之前先将缓存的区域提到目的地,就是调用flush()函数

(4).在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行;j2sdk提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或者输出数据。

3.节点流和处理流

(1).节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)

(2).处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。【处理流可以看成是在原来的管子或者原来的流之上再加上一层管子一个流,使得程序更健全,更能达到目的】

(3).InputStream 继承从InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)

(4).为什么ptop的软件毁硬盘,那是因为这些软件经常从硬盘里面读入和写出比较频繁

(5).继承从OutputStream的流是用于程序中输入数据,且数据的单位为字节(8bit).

(6).继承从Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit);两个两个字节读入,在中文中比较好的体现出来这个好处。与之对应的是Writer

4.节点流类型

(1).类型                字符流                  字节流

File               FileReader             FileInputStream

                   FileWriter             FileOutputStream

Memory Array         CharArrayReader        ByteArrayInputStream

                     CharArrayWriter        ByteArrayOutputStream

Memory String        StringReader          

                    StringWriter

Pipe                PipedReader                PipedInputStream

                    PipedWriter                PipedOutputStream

(2).访问文件:FileInputStream和FileOutputStream分别继承自InputStream和OutputStream用于向文件中输入输出字节

(3).FileInputStream和FileOutputStream类支持其父类InputStream和OutputStream所提供的数据读写方法;注意:在实例化FileInputStream和FileOutputStream流时要用try-catch语句以处理其可能抛出的FileNotFoundException。在读写数据时也要用try-catch语句以处理可能抛出的IOException。FileNotFoundException是IOException的子类【其中在FileOutputStream中当你new一个这种类型的文件时,系统会自动的帮你生成一个文件】

(4).用FileReader的类可以将中文显示出来,因为它是两个两个字节个输出的。也就是一个一个字符往外读。而上面的是一个一个字节往外读的,所以不能将中文显示出来

(5).FileWriter的类是将文件写入,当写入的时候没有这个文件,系统会自动创建这个文件

5,缓冲流

(1).缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时添加了一些新的方法。

(2).缓冲输入流支持其父类的mark和reset方法。BufferedReader提供了readline方法用于读取一行字符串(以\r或\n分隔)。

(3).BufferedWriter提供了newLine用于写一个行分隔符。对于输出的缓冲流,写出的数据会现在内存中缓存,使用flush方法将会使内存中的数据立刻写出。

6.在关闭一个文件输出流时,最好用到flush方法,这样可以把缓冲区的数据输出来。其中了解到mark是标记输入流从第几个字符开始的,而那个reset函数是回归到那个标记符而已。

7.流都是成对成对出现的

8.转换流

(1)InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间的转换

(2)InputstreamReader需要和InputStream”套接”。

(3)OutputStreamWriter需要和outputStream”套接”。

(4)转换流在构造时可以指定其编码集合

9.数据流

(1)DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。

(2)DataInputStream和DataOutputStream提供了可以存取与机器无关的java原始类型数据(如:int,double等)的方法。

(3)DataInputStream和DataOutputStream的构造方法为:

DataInputStream(InputStream in)

DataOutputStream(OutputStream out)boolean类型的数只占一个字节

(4)对于数据流先写的先读出来

10.Print

1.PrintWriter和PrintStream都属于输出流,分别针对与字符和字节

2.PrintWriter和PrintStream提供了重载的Print ;Println方法用于多种数据类型的输出

3.PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息

4.PrintWriter和PrintStream有自动flush功能。

11.object流(直接把一个类的属性输入到指定的文件中比如:T t=new T();writeObject(t))直接将Object写入或读出

1.TestObjectIO.java

2transient关键字,对于要序列化的值不存入硬盘。

3.serializable接口(当你想对某个数据进行序列化那么必须定义serializable

4.externalizable接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值