Java高级学习-IO(2)

举报
AAAI 发表于 2021/04/17 22:39:02 2021/04/17
【摘要】 缓冲流 是对基本流对象的一种增强,通过缓冲区数组读写,减少系统IO次数,提高读写效率 字节缓冲流 字节缓冲输出流 BufferedOutputStream extends OutputStream 继承父类成员方法 构造方法: BufferedOutputStream ( OutputStream out ) 创建一个新的缓冲输出流,以将数据写入指定的底层...

缓冲流

是对基本流对象的一种增强,通过缓冲区数组读写,减少系统IO次数,提高读写效率

字节缓冲流

字节缓冲输出流

BufferedOutputStream extends OutputStream

继承父类成员方法

构造方法:

BufferedOutputStream ( OutputStream out ) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流

BufferedOutputStream ( OutputStream out , int size ) 创建一个新的缓冲输出流,将指定缓冲区大小的数据写入指定的底层输出流

OutputStream out :字节输出流

传递一个FileOutputStream , 缓冲流会给FileOutputStream增加一个缓冲区,提高FileOutputStream的写入效率

int size : 指定缓冲流内部缓冲区大小,不写默认大小

步骤:

  1. 创建FileOutputStream 对象,构造方法绑定要输出的目的地
  2. 创建BufferedOutputStream 对象,传递FileOutputStream 对象,提高FileOutputStream 对象效率
  3. 使用BufferedOutputStream 对象的方法write( 字符要.getBytes() 转换为字节 )写入到内部缓冲区中,
  4. flush+close,刷新+释放资源

字节缓冲输入流:给字节输入流增加缓冲区(数组)

BufferedInputStream extends InputStream

BufferedInputStream b = new BufferedInputStream ( new FileInputStream ( ) )

传递FileInputStream

BufferedOutputStream ( InputStream in) 创建一个BufferedInputStream ,保存参数in

BufferedOutputStream ( InputStream in , int size )

字符缓冲流

字符缓冲输出流

BufferedWriter extends Writer

使用Writer成员方法

构造方法:

BufferedWriter (Writer out ) :创建应该使用默认大小输出缓冲区的缓冲字符输出流

BufferedWriter (Writer out , int sz)

Writer out:字符输出流,可以传递FileWriter,缓冲流会给FileWriter应该缓冲区,提高效率

int sz:缓冲区大小,不写默认大小

特有成员方法:void newLine( ) 写入一个换行符。

BufferedWriter ( new FileWriter( ) )

字符缓冲输入流

BufferedReader extends Reader

BufferedReader (Reader in ) :创建应该使用默认大小输入缓冲区的缓冲字符输入流

BufferedReader (Reader in , int sz)

特有成员方法:

String readLine( ) 读取一个文本行,读取一行数据

行终止符号:换行(’\n’),回车(’\r’),回车后面跟换行(’\r\n’)

返回值:末尾返回null

转换流

字符集

编码集:存储识别各种字符集

ASCII码:现代英语,使用7位(bits)表示一个字符,共128字符,扩展使用8bits表示一个字符

ISO-8859-1:拉丁码表,单字节编码,兼容ASCII编码

GBxxx:国标,GBK–一个中文2个字节

Unicode:表示任意语言任意字符设计。UTF-8 一个中文3个字节

转换流:解决FileWriter/FileReader 的转换乱码问题,即字符集使用错误等等

OutputStreamWriter extends Writer 是 FileWriter 的父类

将指定的charset将要写入流中的字符编码成字节(编码)

父类成员方法

构造方法:

OutputStreamWriter ( OutputStream out ):创建使用默认字符编码的OutputStreamWriter

OutputStreamWriter ( OutputStream out ,String charsetName ):创建使用指定字符集的OutputStreamWriter

参数

OutputStream out:字节输出流,写转换之后字节到文件

String charsetName:编码表名称,默认UTF-8

new OutputStreamWriter ( new FileOutputWriter )

InputStreamReader extends Reader (解码)

InputStreamReader ( InputStream in ):创建使用默认字符编码的InputStreamReader

InputStreamReader ( InputStream in ,String charsetName ):创建使用指定字符集的InputStreamReader

String charsetName:编码表名称,与文件编码相同,不默认UTF-8

序列化

把对象以流的方式,写入到文件中保存,叫写对象,也叫对象的序列化

把文件中保存的对象,以流的方式读取出来,叫对象的反序列化

interface Serializable 启动序列化的接口。

实现序列化时未能实现接口,会抛出NotSerializableExceptions异常

对象的序列化

ObjectOutputSteam extends OutputStream

构造方法:ObjectOutputSteam ( OutputStream out )

OutputStream out:字节输出流

成员方法:void writeObject( Object obj ) 将指定的对象写入ObjectOutputStream

使用步骤:

  1. 创建ObjectOutputStream,构造方法中转递字节输出流
  2. 使用ObjectOutputStream的writeObject,把对象写入到文件中
  3. 释放资源

关键字:transient:瞬态关键字

由于被static修饰的成员变量不能被序列化,序列化的都是对象

被transient修饰的成员变量,也不能被序列化,类似于static

对象的反序列化

ObjectInputSteam extends InputStream

构造方法:ObjectInputSteam ( InputStream in)

成员方法:Object readObject( ) 从 ObjectInputSteam 读取对象,读取完可能需要进行强制类型转换:例如(ArrayList)XXX

反序列化冲突:InvalidClasException异常

出现原因:序列化后,修改类定义,导致反序列化出现问题

解决:将serialVersionUID(序列化之后的对应ID,使用此ID进行验证序列化对象的发送者和接受者是否一样)设置为常量 final long serialVersionUID = 1L

打印流

PrintStream extends OutputSteam

特点:

  • 只负责数据输出,不负责数据的读取
  • PrintStream永远不会抛出IOException
  • 特有方法

构造方法:

  • PrintStream(File file):输出目的地是一个文件
  • PrintStream(OutputStream out)
  • 路径PrintStream(String fileName):输出目的地是一个文件路径

打印流方向:将输出语句的目的地改为参数中传递的打印流的目的地

PrintStream ps = new PrintStream( “XXX.txt” )

System.setOut(ps);

System.ou.print(“XXX”);//XXX写入到文件中

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/115412846

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。