IO流
-
FileInputStream : 字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等
-
FileRader : 一次读取一个字符,可以解决乱码问题,一般纯文本文件使用FileRader,像压缩包,图片,视频等 还是会使用字节流,字符流会出现问题
-
FileOutputStream : 字节输出流.需要指定输出的文件路径,如果找不到该文件,会自动创建
write() : 写出
flush() : 刷缓存 -
构造方法 :
FileOutputStream(String) : 传入文件地址,默认覆盖写入
覆盖写入就是先把文件中内容清空,再写入
FileOutputStream(String,boolean) : boolean类型为true就是追加写入,false就是覆盖写入 -
FileWriter:该类按字符向流中写入数据
-
BufferedReader类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行
-
BufferedWriter: 将文本写入字符输出流,缓冲字符,以便有效地写入单个字符,数组和字符串
-
InputStreamReader:字节流 转换为 字符流
-
PrintStream:标准输出,默认打印到控制台
-
DataOutputStream和DataInputStream:
1)Reader 和 Writer 为了解决方便国际化,面对不同的语言的编码,屏蔽了因为语言不同,产生的乱码问题
2) 而 data数据流为了不同的平台数据读取的一致性,
3)如Unix,Windows,linux等操作系统对数据的不同处理和保存方式,可以通过data数据流解决 -
ObjectOutputStream和ObjectInputStream:
-
序列化 : 对象 --> 硬盘中 进行持久化存储
-
反序列化 : 硬盘中对象 --> 堆内存对象
-
创建对象 :
1 new 最常用
2 反射机制
3 反序列化
4 clone 不用了,被序列化代替 -
应用场景 :
1 序列化就是将数据转换为二进制流,然后能够进行持久化存储和进行网络传输,
2 数据 --> 序列化 --> 加密处理 --> 网络传输 --> 解密处理 --> 反序列化 --> 数据
//FileInputStream
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("D://a.java");
// 循环读取
int temp = -1;
while ((temp = fis.read()) != -1) {
System.out.print((char) temp);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 1.7 自动关闭资源
try (FileInputStream fis1 = new FileInputStream("D://a.java");) {
// 循环读取
int temp = -1;
while ((temp = fis1.read()) != -1) {
System.out.print((char) temp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//FileRader
public static void main(String[] args) {
try (FileReader fr = new FileReader("D://a.java");) {
char[] chars = new char[5];
int temp = -1;
// read : 返回下一个字符,到达文件末尾返回-1
while ((temp = fr.read(chars)) != -1) {
System.out.print(new String(chars, 0, temp));
}
} catch (Exception e) {
e.printStackTrace();
}
}
//BufferedReader
public static void main(String[] args) {
try (
FileReader fr = new FileReader("D:/a.java");
BufferedReader br = new BufferedReader(fr);
){
String temp = null;
// readLine : 读取下一行的数据,返回值就是读到的数据.如果到达文件默认,返回null
while( (temp=br.readLine()) != null ){
System.out.println(temp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//InputStreamReader
// 得到字节流
FileInputStream fis = file("D:/a.java");
// 转换为字符流
InputStreamReader isr = new InputStreamReader(fis);
// 使用缓冲流
BufferedReader br = new BufferedReader(isr);