自学内容网 自学内容网

Java——IO流

认识IO流

I指input,称为输入流:负责把数据读到程序内存中去

O指Onput,称为输出流:负责写数据输出到网络||磁盘

IO流的分类

按照流的方向,IO流分为:输入流和输出流

按照流的内容,IO流分为:

  • 字节流:适合操作所有类型的文件。比如,音频,视频,图片,文本文件的复制转移等等。
  • 字符流:只适合操作纯文本文件。比如:读写txt,java文件等等。

IO流的体系

字节输入流InputStream,字节输出流OnputStream,字符输入流Reader,字符输出流Writer。都属于抽象类。

对应的实现类

输入:从磁盘||网络输入到内存中

输出:从内存输出到磁盘||网络中

FileInputStream文件字节输入流

作用:

以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。

new FileInputStream

创建字节输入流管道与源文件接通。

,read()

每次读取一个字节返回,如果没有数据可读返回-1

UTF-8中汉字三个字节一起读取,.read()每次读取一个字节会截断汉字的读取从而产生乱码。

new byte[3]

创建一个长度为3的字节数组对象,这意味着这个数组可以存储3个 byte 类型的元素。

.read(b)

每次用一个字节数组读取数据,返回字节数组读取了多少个字节数,如果发现没有数据可读会返回-1。

new String(b);

将b转换为字符串形式

源文件数据

new String(b,0,len);

若是以这样的源文件

就会乱码,因为3个字节为一桶水,截断了汉字,依然无法避免读取汉字输出乱码的问题。

使用字节流读取中文,如何保证输出不乱码,怎样解决?

定义一个与源文件一样大的字节数组,一次性读取完文件的全部字节。

这样做是否存在问题?

如果文件过大,创建的字节数组也会过大,可能引起内存溢出。

.readAllBytes();

点击readAllBytes()查看源码

所以读取文本适合用字符流,字节流适合做数据的转移,比如:文件的复制

后续内容持续更新


原文地址:https://blog.csdn.net/2303_79136949/article/details/145135973

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!