缓冲流&转换流&序列化流&打印流——Java学习笔记

1 篇文章 0 订阅

缓冲流

BufferedOutputStream

继承于outputstream

构造:

new BufferedOutputStream(outputstream);
new BufferedOutputStream(out,size);

使用:

bos = new BufferedOutputStream(new FileOutputStream("a.txt"));
bos.write();

BufferedInputStream

继承于InputStream

构造

new BufferedInputStream(inputstream);
new BufferedInputStream(inputstream,size);

使用

bis =new BufferedInputStream(new FileInputstram("a.txt"));
while((len=bis.read())!=-1){
	xxxlen
}

完全类似于文件字节/符输入输出流

测试了一下,复制一张图片。使用文件字节输入输出流,使用byte数组的形式,花费234毫秒。使用字节缓冲输入输出流,不适用byte的写入读出形式,花费46毫秒。使用byte的读入写出形式,花费4毫秒

BufferedWriter

继承于Writer

newLine():添加换行

BufferedReader

字符输入缓冲流,继承于reader

string readLine():读一行,若一行为空则为返回null


转换流

编码问题

ASCII码:0–48;a–97;A–65

GBK:在GB2312基础上的扩展

UTF-8:中文3个字节表示

FileReader默认读取utf-8格式。这样读入GBK的中文文本就出现乱码。底层是调用inputstream来读取文件。实际上的作用就是使用默认码表将字节转换为字符。

InputStreamReader

继承于Reader。将字节转换为字符,但可以通过指定编码表进行解码

OutputStreamWriter

构造

new OutPutStreamWriter(out);
new OutputStreamWriter(out,charset)

序列化流

序列化:将对象写入到文件

反序列化:将文件中的对象读取到内存

ObjectOutputStream

new ObjectOutputStream(outs);
  1. s创建oos对象
  2. 构造中填入outputstream对象
  3. oos.writeObject(填入的对象)。这个s对象的类需要实现Serializable接口。否则会报未序列化异常

ObjectInputStream

new ObjectInputStream(ins);

需要:

  • 类需要实现Serializable接口
  • 存在类对应的class文件

瞬态关键字

static关键字l修饰的成员变量不可以序列化。因为序列化的都是对象

transient关键字修饰的成员变量不可以被序列化

InvalidClassException

修改类后不进行序列化直接反序列化后,出现此异常

在将存入的对象的java文件编译为class文件时,由于这个类实现了Serializable接口。这个class文件会得到一个序列号。保存这个对象的文件中也会有这个序列号。在反序列号时,使用class文件的序列号与保存文件中的序列号相比较,一致则反序列化成功。而更改类不进行序列化时,由于编译的java文件序列号是新的。而保存文件中序列号是之前的,对不上,就会报上边的异常。

解决:使一个类序列号不会改变。

在要序列化的类中,定义一个long序列号

private static final long serialVersionUID = 1L;

打印流

PrintStream,继承于OutputStream

new PrintStream(out);
new PrintStream(file);
new PrintStream(str);

只能数据输出不可以读取数据

不会抛出io异常

write():会使用编码表来输出数据。如97—>a

print():是什么打印什么。如97—>97

println()

输出目的地:

sout:输出在控制台

system.setout(new PrintStream(“目的地”)):输出在目的地文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值