一、流的定义
不管数据来源是什么,Java将其抽象为流。流帮我们屏蔽具体实现细节,提供统一的操作接口。读写时只对流进行操作,无需关心具体实现细节。
- 输入流:从流中读出数据。
- 输出流:将数据写入流。
二、输入输出流
1.字节输入输出流
以Stream结尾的一般都是字节流。读和写的单位都是字节。
对字节流进行读写,编写代码时无需关心底层实现细节。
字节输入流:InputStream
字节输出流:OutputStream
- copy功能
从输入流in读取数据,然后全部写入输出流out
!=-1指的是没有读到流尾部。
2.文件输入输出字节流
InputStream/OutputSream是抽象类,不能实例化,有不同的子类。其读写文件的子类。
- FileInputSream
- FileOutputSream
read()返回-1意味着读到文件尾部。
三、二进制文件与文本文件
- 文本文件:以ASCII字符的形式存储
- 二进制文件:数据在内存中以二进制的形式存储
对于以下代码:
记事本打开x.txt后会显示
出现乱码,因为使用的类是按字节将数据写入文件,生成了二进制文件。而使用记事本打开 则按字符编码来解码文件的数据,因此无法正确显示。
所以需要使用字符流读写文本文件。