学习笔记之缓冲流

使用字节输入流读取:一个一个传
使用字节缓冲输入流:传数组

缓冲流

字节:BufferedInputStream BufferedOutputStream

字符:BufferedReader BufferedWriter

BufferedOutputStream字节缓冲输出流
close()
flush()
write(byte[] b) write(byte[] b,int off,int len) abstract void write(int b)
要flush或者close刷新缓冲区,才能显示在文件

BufferedInputStream字节缓冲输入流

1.创建FileInputSteam对象,构造方法中绑定要读取的数据源
2.创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高FileInputStream对象的读取效率。
3.使用它的read,读取文件。
4.释放资源
FileInputStream fis=new FileInputStream(“abc\123.txt”)
BufferedInputStream bis=new BufferedInputStream(fis)
int len=0
while((len=bis.read())!-1)
syso(len)
bis.close
int read()
int read(byte[] b)
void close()

BufferedWriter字符缓冲输出流

BufferedWriter bw=new BufferedWriter(new FileWrite(“abc/123.txt”))
void write(int c) write(char[] cbuf)写入单个字符
abstract void write(char[] cbuf,int off,int len)
write(String str) write(String str,int off,int len) flush() close()
特有:void newLine()写入一个行分隔符。会根据不同操作系统,获取不同的分隔符
bw.newLine();代替bw.write("\r\n")
换行:换行符号 windows:\r\n Linux:/n mac:/r

BufferedReader字符缓冲输入流

BufferedWriter bw=new BufferedWriter(new FileWrite(“abc/123.txt”))
int read(int c) read(char[] cbuf)一次读取多个字符,将字符读入数组
BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流
BufferedReader(Reader in,int sz)指定大小

参数 Reader in:字符输入流 我们传递FileReader,缓冲流会给它增加一个缓冲区,提高它的读取效率
特有:String readLine()读取一个文本行。读取一行数据
行的终止符号:通过下列字符之一即可认为某行已终止:换行(’\n’)、回车(’\r’)或回车后直接

跟着换行(\r\n).
返回值:包含该行内容的字符串,不包含任何中支付,如果已到达流末尾,则返回null
BufferedReader br=new BufferedReader(new FileReader(“abc\123.txt”))
String line;
While((line=br.readLine())!=null){
syso(line)}
br.close();

把能看懂的变成看不懂的——编码
把看不懂的变成能看懂的——解码

转换流:

InputStreamReader是字节流通向字符流的桥梁 把字节转换成字符——>解码
可以查IDE默认码表utf-8,可以查指定码表gbk

OuputStreamReader是字符流通向字节流的桥梁 把字符变成字节——>编码
可以查IDE默认码表utf-8,可以查指定码表gbk

ObjectOutputStream对象的序列化流

作用:把对象以流的方式写入到文件中保存
特有:void writeObject(Object obj)将指定的对象写入ObjectOutputStream

序列化和反序列化会抛出NotSerializableException没有序列化异常
要实现序列化Serializable接口。才能使其进行
这个接口也叫标志型接口,等于给类添加一个标志,,给猪肉盖个章
有:就可以进行序列化和反序列化
没有:就会NotSerializableException抛出异常

ObjectInputStream:对象的反序列化流

作用:把文件中保存的对象,以流的方式读取出来使用
特有:
Object readObject()从ObjectInputStream读取对象
这个方法声明抛出ClassNotFoundException(class文件找不到异常)
当不存在对象的class文件时抛出此异常

反序列化的前提

1.类必须实现Serializable
2.必须存在类对应的class文件
存在class,但是修改了会产生下面
InvalidClassException异常
序列化冲突异常
如果序列化后改变文件,它的UID改变了
序列化与反序列化的serialVersionUID不一样
但是可以自己进行定义 static final long serialVersionUID=1L
就不会发生冲突

被静态修饰的成员变量不能被序列化,序列化的都是对象

transient关键字:瞬态关键字
被它修饰成员变量,不能被序列化
与static差不多

PrintStream打印流

为其他输出流添加了功能,使他们能够方便地打印各种数据值表示形式。
特点:1.只负责数据的输出,不负责数据的读取
2.与其他输出流不同,它永远不会抛出IOException
特有:print() println()
输出任意类型的值

PrintStream ps=new PrintStream("\目的地.txt")
System.setOut(ps)//把输出语句的目的地改变为打印流的目的地
syso(“我打印在目的地”)
ps.close();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值