Java中的IO流

Java中的IO流

IO流概述:

IO流本质就是一种数据的流动,按照流动的方向分为输入(Input)和输出(Output)
Java中的IO操作主要指的是 java.io包下的一些常用类的使用,通过常用类对数据进行读取(输入Input)和写出(输出Output)

计算机中的任何数据(文本、图片、视频、音乐等等)都是以二进制的形式进行存储的。
在任何流进行数据传输时,底层都是采用二进制的形式进行数据传输的。

IO流的分类:
按照流的方向来分,分为输入流和输出流
按照流动的数据类型来分,可以分为:字节流、字符流、打印流、对象流等等,但我们最常见的是字节流和字符流。

字节流和字符流的区别:

最直观的区别,字节流和字符流都分为输入和输出流,其顶级父类分别为一下内容:

字节流:

----输入流: InputStream

----输出流: OutputStream

字符流:

----输入流: Reader

----输出流: Writer

应用方面区别:

字符流一般用于读取文字,字节流一般用于读取除文字外的其他内容。

原因:

文字的字节数是动态的,不同文字占用的字节数是不同的,字节流只能读取规定数量的字节数,但文字的使用的字符编码为UTF-8,UTF-8对文字进行编码时会动态规定文字所占用的字节数,是不确定的,所以字节流在读取文字时经常会出现读取半个文字的情况。

而字符流本质是将字节流进行了动态的封装,每次动态读取一个文字所占有的字节,所以在读取文字时不会出现乱码的情况。

字节流

OutputStream类:

为抽象类,也是输出字节流的所有类的超类,常见方法如下:

close();

关闭流的方法。
因为流在使用文件的过程中都是在占用文件的过程,如果在使用后没有将流关掉,则会导致其他流无法进行访问,所以在所有的流的使用完成后都需要将其关闭。

flush();

刷新该输出流,当输出流被改变时,进行刷新并强制写出任何被缓存的数据。

write(byte[] b);

将字节数组写入该输出流

write(byte[] b, int off , int len);

将字节数组从off下标开始写入文件,写len长度的数组内容

write(int b);

将字节写入此输出流,注:该传入的内容虽然为int型的内容,但本质传入的是一个字节,超过一个字节的内容不能使用。

写入的内容为数值对应的ASCII码的值

FileOutputStream

OutputStream最常用的子类,含义为:文件输出流。

构造方法:

FileOutputStream(File file);

该构造方法只能清空文件后再重新对文件进行写入。

FileOutputStream(File file , boolean append);

当布尔值为true时,在文件末尾进行写入操作,当boolean为false时,清空文件再进行写入操作。

常用方法为继承父类重写的方法,与OutputStream类中的方法功能相同。

FileInputStream

常用方法:

read();

读取文件的一个字节,返回值为int,取值范围为0~255;如果读取的应为字符,可以使用强制类型转换将其转换为char型。

当读取内容为空时,默认读取的数字为-1

read(byte[] b);

读取一个字节数组的内容。

字节流

本质是字节流的封装,在调用时对表达一个字符的字节进行封装,另字节能够整体成字符的形式;

方法与字节流基本相同。

FileWrite

输入流,用于向文件中写入内容。

构造方法:

FileWrite(File file);

该构造方法只能清空文件后再重新对文件进行写入。

FileWrite(File file , boolean append);

当布尔值为true时,在文件末尾进行写入操作,当boolean为false时,清空文件再进行写入操作。

常用方法:

write();

当构造方法中布尔值为false或不存在时,先清空文件再对文件进行写入。

append();

在文件原内容结尾处继续写,返回的值为传入的方法(this),不会新建立对象进行返回,返回的方法为传入的方法。

FileReader

从文件中读取字符。

常用方法:

read();

读取一个字节

read(char[] c);

将文件内容读取至字符数组c中;

返回值为int型的读取的长度。

注:读取后打印时,默认打印出的内容为整个数组的长度的全部内容,会大量占用内存和打印速度,可以配合String包装类中的方法来进行使用。
代码如下:

FileReader fr = new FileReader("b.txt");
char[] ch = new char[100];
int len = fr.read();
//test是将字符串数组截取出可用的部分进行打印
String test = new String(ch,0,len);
fr.close();
System.out.println(text);
//打印的内容为文件中的内容。(文件长度不得超过字符串数组的最大值)

字符流有一个特殊的内容,因为字符流本质上是对字节流的封装,将数个字节封装成一个字符,所以在加载过程中是每次读取一个字符,但可能出现一次读取半个字符的情况,在字符流中默认将其加载至缓存中,待字符的另一半出现后再加载。

在字符流的方法中flash();方法会强制读取停留在缓存中的字节,如果不刷新将缓存中的内容读取,内容不会被读取出来。

注:close();方法默认会在关闭文件前强制读取停留在缓存中的字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值