Java基础—Day21—访问文件、缓冲流、对象流、转换流、特殊流

Java基础—Day21

在使用输出流的过程中,为了保证流中的数据能够刷写到目的地,最好调用一次 flush
 
在使用流的过程中,注意步骤的规范性!!!!!
 

FileInputStream/FileOutputStream

构造方法小结:
 
FileInputSteam
  • FileInputStream(String name) :直接传一个文件名的路径
  • FileInputStream(File file) :传一个file对象,感觉比上面的要麻烦一步
  • FileInputStream(FileDescriptor fdObj) :这个没怎么用过
FileOutputSteam
 

注意:
  1. 输入流的文件必须存在,否则会抛出文件找不到异常
  2. 在关闭流的时候,要判空,防止出现空指针异常
  3. 关闭的顺序,有这么一个原则:先用的后关
  4. 在使用缓冲数组的时候,一定要注意:缓冲数组中保存数据采用的是覆盖策略,而不是清空策!!!若文件的字符数正好是缓冲数组长度整数倍,就用这种方式 String str = new String(buf); ok,否则数据会出问题 -----》 所以,我们应该用缓冲数组保存的真实有效的数据格式,即这种写法:String str = new String(buf,0,realLen)
  5. 我们的缓冲数组的大小,根据文件大小去设定,若文件比较大,通常设置为1024的整数!!
  6. 输出流,文件若不存在,它会自动创建!!!

FileReaderFileWriter

使用try-with-resource块时,资源会自动关闭。作为此过程的一部分,它还将自动调用flush

FileWrirter 的写数据方法
 

练习:

使用两个SB中任意一个去拼接字符串,然后实现字符串的替换,将替换后的结果,保存到文件中
* 源文件:你是{name},年龄{age} ----> 你是{张三},年龄{20},将这个结果写出去!!!

缓冲流 BufffferedXxx

BufferedXX ,缓冲流,就类似粗水管,只不过, 我们创建对象的时候,需要以前面的流作为参数, 即粗水管里面包了一层细水管!!!
 
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO 次数,从而提高读写的效率
 

BufferedInputStream BufferedOutputStream

1. 构造方法
 

BufferReader BufferWriter

BufferWrirte 中有一个新的玩意: newLine()  【可以换行】

BufferReader 有特有的方法: br.readLine() ; 【可以读取到一行,返回的就是一个字符串】

 

转换流 InputStreamReader 和 OuputStreamWriter

读取包含中文的文本文件时,可能出现中文乱码,怎么办?
 
InputStreamReader fr=new InputStreamReader(fis,"UTF-8");
 
OutputStreamWriter(OutputStream out,String charsetName);


读写二进制文件 DataInputStream 和 DataOutputStream

可以看成是对 InputStream 的包装
 
DataInputStream
  1. FileInputStream的子类
  2. 与FileInputStream类结合使用读取二进制文件

DataOutputStream

  1. FileOutputStream的子类
  2. 与FileOutputStream类结合使用写二进制文件
练习:使用这个流完成图片的复制
 
 

打印流 PrintStream

了解 PrintStream

行号读取 LineNumberReader

LineNumberReader
 
两个方法: String readLine() int getLineNumber()
 
 

对象流 ObjectInputStream 和 ObjectOutputStream

序列化需求

场景一:内存对象需要在其它环境下使用
  • 两个进程间进行网络通信时,无论是发送何种类型的数据,均需以二进制序列形式进行传送
    发送方必须将数据对象(比如Java对象)转化为字节序列
    接收方则需要将接收到的字节序列再还原成Java对象
场景二:内存对象需要在将来某个时间使用
  • 将内存中的数据对象永久存储在磁盘中(持久化)

常用序列化方案

protobuf :序列化的框架!!!
 

序列化和反序列化过程

尖叫提示:先写的先读

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

实现步骤

 

作业

1.缓冲流的使用

2.对象流的使用

将上题中的集合,通过对象流写入到二进制文件中,然后读取出来并打印输出

3.文本排序

需求:读取上述文本信息,按照前面的序号进行排序!!
 

 
 

4.使用转换流完成编码格式转换

GB2312/GBK 编码格式的文件,转换成 UTF-8 格式!!!保证直接用工具打开或者流读取,中文不乱码即可!!!
 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值