(519)

文件追加:

                FileOutputStream(File file,boolean append)

                FileOutputStream(String path,boolean append)

                                如果第二个参数为true,则指定为追加模式.此时创建文件流时如果指定的

                文件存在则内容会全部保留,新写入的内容会被追加到文件中

java将流分为两类 节点流与处理流:

 节点流:

                 又称为低级流,特点:实际连接程序与另一端的"管道",负责实际读写数据的流.

                 IO一定是建立在某个低级流的基础上进行的.

                文件流就是低级流,它们是实际连接程序与文件的管道,负责读写文件数据

处理流:

                又称为高级流,特点:不能独立存在,必须连接在其他流上,目的是当数据经过该

                流时对数据进行某种加工处理,简化我们的同等操作

                实际开发中我们经常串联一组高级流最终到某个低级流上,是的读写数据的过程中

                流水线式的操作对数据加工处理,这个过程也称为"流的连接" *

 缓冲流(Bufferde)

                java.io.BufferedInputStream和BufferedOutputStream

                缓冲流是一对高级流,在流连接中的作用:保证读写效率

注意:     在结束执行之后只需要关闭高级流即可,关闭高级流时通常会关闭其连接的流

                在程序中直接使用高级流的变量名调用方法即可

flush方法(清空缓存)

                是在接口Flushable上定义的,

        目的:强制将缓冲区中已经缓存的数据全部写出

                而OutputStream实现了该接口,java中所有的输出流都有flush方法.

                并非所有输出流的flush都有实质作用,而更多的是为了将flush动作传递下去,

                最终传递给缓冲流来真正完成清空缓冲区操作.

对象流(Object)

                java.io.ObjectOutputStream和ObjectInputStream

                对象流是一对高级流,在流连接中的作用是进行对象的序列化与反序列化

                对象序列化:将一个java对象转换为一组可以被保存或传输的字节的过程

                对象输出流提供的方法: void writeObject(Object obj)

                可以将给定对象进行序列化,前提,该对象所属的类必须实现接口: java.io.Serializable

                否则序列化时会抛出异常:java.io.NotSerializableException

transient关键字(忽略执行)

                被该关键字修饰的属性在进行对象序列化是会被忽略。

                忽略不必要的属性可以达到对象序列化的"瘦身"

      目的:减少不必要的开销 持久化时可以降低磁盘空间的开销,网络传输时可以提高传输速度

 

字节与字符流

java将流按照读写的数据单位划分为字节与字符流

java.io.InputStream和OutputStream是字节流的超类

java.io.Reader和Writer是字符流的超类

字符流
最小读写单位是一个char(字符)

都是高级流,本质上底层最后还是要读写字节,只不过字符与字节的转换由字符流完成

可以直接写出字符串

转换流

转换流是字符流常用的一对实现类

作用:衔接字节与其他字符流

           将写出的字符按照指定的字符集转换为字节

他们在流链接中是重要的一环,但是实际开发中我们不会直接操作这对流 java.io.InputStreamReader和OutputStreamWriter

读:InputStreamReader

        int read()
        对于字符流而言,该方法用于读取1个字符,返回的int值对应的2进制
        是"低16位有效",实际返回的就是一个char。
        但是如果返回的int值为整数-1,依然表达流读取到了末尾

写:OutputStreamWriter

        int write()

        字符流可以直接写入字符串

作用:将写出的字符按照指定的字符集转换为字节

           因此,构造器创建时除了指明链接在哪个流上之外,还可以明确字符集

意义:转换流是唯一一对可以链接在字节流上的字符流,这样以来其他的字符流就可以通过

           链接转换流最终和字节流搭配使用

缓冲字符流、

 java.io.BufferedWriter与BufferedReader

作用: 块写文本数据保证写出效率的(内部默认有一个长度8192的char数组)

BufferedReader提供的独有方法:

String readLine() 方法

String line = br.readLine();

作用:按行读取字符串

当第一次调用readLine()方法时,缓冲字符输入流会一次性读取8192个字符(块读)

并存入内部的char数组中,然后从数组一个字符开始直到找到换行符位置,然后将

之前的内容转换为一个字符串返回.(看起来像是读取了一行字符串)

当第二次调用readLine()则直接从上次遇到换行符的位置开始再继续寻找下一个

换行符为止,将之间的内容转换为一个字符串返回

如果流读取到了末尾,此时该方法会返回null

        

java.io.PrintWriter

作用:具有自动行刷新功能的缓冲字符输出流

其内部总是链接BufferedWriter作为缓冲功能

缓冲流以块读写形式保证读写效率,并且可以按行读写字符串

PrintWriter提供了直接对文件进行写操作的构造器

PrintWriter(File file)

PrintWriter(String path)

        println方法

        PrintWriter第一个参数是一个输出流时,就支持再传入一个boolean 类型的参数,

        表示是否开启自动行刷新功能。

        当自动行刷新功能开启后,每当我们调用println方法时就会自动flush

        注:print方法并不会自动flush

        PrintWriter pw = new PrintWriter(bw,true);//开启自动行刷新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值