初识Java IO流
I:input:输入流:程序——》文件
O:output:输出流:文件——》程序
IO流可以分为两类
字节流:可以操作所有类型的文件(图片,音频,文本,视频)
字符流:只能操作纯文本文件(txt,md,xml,lvc)
IO流的基本方法
InputStream 类
1、int read()
:读取数据
2、int read(byte b[], int off, int len)
:从第 off 位置开始读,读取 len 长度的字节,然后放入数组 b 中
3、long skip(long n)
:跳过指定个数的字节
4、int available()
:返回可读的字节数
5、void close()
:关闭流,释放资源
OutputStream 类
1、void write(int b)
: 写入一个字节
2、void write(byte b[], int off, int len)
: 将数组 b 中的从 off 位置开始,长度为 len 的字节写入
3、void flush()
: 强制刷新,将缓冲区的数据写入
4、void close()
:关闭流
Reader 类
1、int read()
:读取单个字符
2、int read(char cbuf[], int off, int len)
:从第 off 位置开始读,读取 len 长度的字符,然后放入数组 b 中
3、long skip(long n)
:跳过指定个数的字符
4、int ready()
:是否可以读了
5、void close()
:关闭流,释放资源
Writer 类
1、void write(int c)
: 写入一个字符
2、void write( char cbuf[], int off, int len)
: 将数组 cbuf 中的从 off 位置开始,长度为 len 的字符写入
3、void flush()
: 强制刷新,将缓冲区的数据写入
4、void close()
:关闭流
字节流
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt",true);
// 字符串转换为字节数组
byte[] b = "abcde".getBytes();
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b);
// 关闭资源
fos.close();
字符流
// 使用文件名称创建流对象
FileReader fr = new FileReader("abc.txt");
// 定义变量,保存数据
int b;
// 循环读取
while ((b = fr.read())!=-1) {
System.out.println((char)b);
}
// 关闭资源
fr.close();
缓冲流
缓冲流的工作原理:将数据先写入缓冲区中,当缓冲区满时再一次性写入文件或输出流,或者当缓冲区为空时一次性从文件或输入流中读取一定量的数据。这样可以减少系统的 I/O 操作次数,提高系统的 I/O 效率,从而提高程序的运行效率。
自带长度为8192的缓冲区
对于字符流提升不明显(本身具有缓冲区)
转换流
转换流:是字符流和字节流之间的桥梁
转换流主要有两种类型:InputStreamReader 和 OutputStreamWriter。
InputStreamReader 将一个字节输入流转换为一个字符输入流,而 OutputStreamWriter 将一个字节输出流转换为一个字符输出流。它们使用指定的字符集将字节流和字符流之间进行转换。
反/序列化流
反/序列化流:可以把Java的对象写到本地文件中
序列化是指将一个对象转换为一个字节序列(包含对象的数据
、对象的类型
和对象中存储的属性
等信息),以便在网络上传输或保存到文件中,或者在程序之间传递。在 Java 中,序列化通过实现 java.io.Serializable 接口来实现,只有实现了Serializable接口的对象才能被序列化。
反序列化是指将一个字节序列转换为一个对象,以便在程序中使用。