字节流和字符流

目录

字节流:

字节输出流:

文件字节输出流:

字节输入流:

文件字节输入流:

字符流:

字符输入流:

文件字符输入流:

字符输出流:

文件字符输出流:

关闭和刷新的区别:

重要提醒:


今天,某位同事让我帮他找BUG,就是某个应届生,他的BUG很简单,没有关流,导致文件删不掉

 

以下是吐槽他的话,请忽略,实在是提起这个人生气,不吐槽一下感觉心里堵得慌

说实话挺烦他的,不是因为他技术问题,毕竟谁都有刚开始的时候,你不会,出于人道主义,我不介意教你,但是,我跟你说的,你不知道记,不知道学,一点都不上心,每次让我帮你找BUG,帮你找到了,一句谢谢也没有,而且每次说是让我帮你找BUG,跟我一说你就不管了,去玩了,搞得就跟是我的BUG一样,搞笑!我没有义务帮你找你的问题,帮你找你能不能上点心,我是帮你找,不是替你找,懂?是你不会,我帮你一块,你直接不管了是什么意思?而且生产问题,那么着急的问题,你从2020年12月拖到了2021年四月,还没开始解决,每次人家需求问你解决了么,你就一句没有,然后继续玩手机,你这个是什么破态度,生产问题优先级最高不懂?人家是提需求的,但是为了你开发方便,人家都愿意费劲去找甲方爸爸谈n次,让甲方爸爸改需求,你好大的脸!是你的问题,你不处理,你还泄露代码,没有一点点责任心和担当,没有一点职业素养,真的是个XX,能不能摆正自己的位置,没有人有义务帮你,你是以正式工作的身份进来的,没有人像你上学期间一样,带着你做项目什么的

 

OK,吐槽完了,开始分享

字节流和字符流最大的区别,如字面意思,一个读出来是字节,一个读出来是字符~

在GBK编码中,一个中文占2个字节

UTF-8编码中,一个中文占3个字节

所以如果用字节流去读中文,读出来可能是我们看不懂的玩意~

字节流:

字节输出流:

public abstract class OutputStream implements Closeable, Flushable

OutputStream是所有字节输出流类的最顶层父类(或者说超类)

方法:

.close() // 关闭此流并释放与此流相关的所有系统资源
.flush() // 刷新此流并强制所有缓冲的输出字节被写出
.write(byte[] b) // 将b.length长度的字节数组写入到输出流
.write(byte b[], int off, int len) // 从指定的字节数组b,从off偏移量开始,写入len长度的字节
.write(int b) // 将指定的字节输出

文件字节输出流:

构造方法:

FileOutputStream(File file) // 输出的目的地是一个文件
FileOutputStream(String name) // 输出的目的地是一个路径
FileOutputStream(File file, boolean append) // boolean值代表是否需要续写,true为可续写,不会覆盖之前的文件,会往文件的结尾继续写数据,false为不可续写,文件名相同,会创建一个新的空白文件覆盖之前的文件
FileOutputStream(String name, boolean append) // boolean值代表是否需要续写,true为可续写,不会覆盖之前的文件,会往文件的结尾继续写数据,false为不可续写,文件名相同,会创建一个新的空白文件覆盖之前的文件

PS:换行符

windows:\r\n
linux:/n
mac:/r  从 Mac OS X开始与Linux统一

字节输入流:

public abstract class InputStream implements Closeable

InputStream是所有字节输入流的最顶层父类(或者说超类)

方法:

.close() // 关闭此流并释放与此流相关的所有系统资源
.read() // 从输入流中读取数据的下一个字节
.read(byte[] b) // 从输入流中读取一批字节,并存储到一个字节数组b中

文件字节输入流:

构造方法:

FileInputStream(File file) // 读取源是一个文件
FileInputStream(String name) // 读取源是一个路径

字符流:

字符输入流:

public abstract class Reader implements Readable, Closeable

所有字符输入流的最顶层父类(或者说超类)

方法:

.close() // 关闭此流并释放与此流相关的所有系统资源
.read() // 从输入流中读取一个字符
.read(char[] cbuf) // 从输入流中读取一批字符,并放入字符数组cbuf中

文件字符输入流:

构造方法:

FileReader(File file) // 读取源是一个文件
FileReader(String fileName) // 读取源是一个路径

字符输出流:

public abstract class Writer implements Appendable, Closeable, Flushable

所有字符输出流的最顶层父类(或者说超类)

方法:

.close() // 刷新并关闭此流
.flush() // 刷新此流并强制所有缓冲的字符被写出
.write(int c) // 写出一个字符
.write(char[] cbuf) // 将指定的 cbuf.length长度的字符数组写到此输出流
.write(char[] b, int off, int len) // 从指定的字符数组b,从off偏移量开始,写入len长度的字节
.write(String str) // 写出一个字符串
.write(String str, int off, int len) // 写入字符串的某一部分

文件字符输出流:

构造方法:

FileWriter(File file) // 输出源是一个文件
FileWriter(String fileName) // 输出源是一个路径
FileWriter(File file, boolean append) // boolean值代表是否需要续写,true为可续写,不会覆盖之前的文件,会往文件的结尾继续写数据,false为不可续写,文件名相同,会创建一个新的空白文件覆盖之前的文件
FileWriter(String fileName, boolean append) // boolean值代表是否需要续写,true为可续写,不会覆盖之前的文件,会往文件的结尾继续写数据,false为不可续写,文件名相同,会创建一个新的空白文件覆盖之前的文件

关闭和刷新的区别:

flush :刷新缓冲区,把缓冲区中的数据刷新到文件,流对象可以继续使用。
close :关闭流,释放系统资源。关闭前会刷新缓冲区。把缓冲区中的数据刷新到文件,关闭之后流对象就不能使用了

重要提醒:

用完一定、一定、一定、一定记得关流,不然会一直占用,会给自己埋下一个坑!!!个人对文件的处理会try catch,并且一定会加一个finally,里边关流,希望大家记得关流!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值