一、转换流
作用:实现字节流到字符流间的转换
解决中文乱码问题
InputStreamReader:字节字符转换输入流,将字节输入流转换为字符输入流 使用的是默认的GBK编码
InputStreamReader reader = new InputStreamReader(newFileInputStream(newFile("文件地址")),"UTF-8");
//"UTF-8"也可以写成别的编码格式,也可以不写,默认GBK
outputStreamWriter:字符转换输出流,将内存中的字符转成字节保存到硬盘中。
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file,true), "utf-8");
//写文件时如果不想覆盖原文件内容,加true 不写默认false
二、缓冲流
作用:主要是为了增强基础流的功能而存在的,提高了流的工作效率【读写效率】 和加byte数组读取数据本质一样
但缓冲流效率更高。
BufferedInputStream:
//实例化一个File对象
File file = new File("文件地址");
//实例化一个缓冲字节输入流的对象
BufferedInputStream input = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream:
File file = new File("文件地址");
//实例化换种字节输出流
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file));
BufferedReader:
//实例化FIle对象
File file = new File("文件地址");
//实例化缓冲字符流的对象
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter:
// 实例化FIle对象
File file = new File("文件地址");
//实例化缓冲字符输出流
BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
三、内存流
输入和输出都是从文件中来的,当然,也可将输出输入的位置设置在内存上。
ByteArrayInputStream:将内容写入到内存中,是Inputstream的子类
ByteArrayOutputStream:将内存中数据输出,是OutputStream的子类
//定义一个字符串,全部由大写字母组成
String string = "HELLOWORLD";
//内存输入流
//向内存中输出内容,注意:跟文件读取不一样,不设置文件路径
ByteArrayInputStream bis = new ByteArrayInputStream(string.getBytes());
//内存输出流
//准备从内存中读取内容,注意:跟文件读取不一样,不设置文件路径
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int temp = 0;
//read()方法每次只读取一个字符
while((temp = bis.read()) != -1) {
//将读取的数字转为字符
char c = (char)temp;
//将字符变为大写
bos.write(Character.toLowerCase(c));
}
//循环结束之后,所有的数据都在ByteArrayOutputStream中
//取出内容,将缓冲区内容转换为字符串
String newString = bos.toString();
//关闭流
bis.close();
bos.close();
System.out.println(newString);
四、标准输入输出流
Java的标准输入/输出分别通过System.in和System.out实现,默认情况下分别代表是键盘和显示器。
PrintStream:PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
重定向System.out() 输出的位置(默认控制台)
PrintStream ps = new PrintStream("E:\\A.txt");
System.setOut(ps);
System.out.println("你好,北京!"); //这句话本来会打印到控制台,但是由于上面重定向了打印位置,所以此句话会打印到E盘下的A文件中
PrintWriter:向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream中的所有 print方法。它不包含用于写入 原始字节的方法。
FileInputStream inputStream = new FileInputStream(new File("test33.txt"));
//setIn
System.setIn(inputStream);
//System.out.println("请输入内容:");
//默认情况下是从控制台进行获取内容
//但是如果使用setIn方法设置了重定向之后,将从指定文件中获取内容
Scanner sc = new Scanner(System.in);
String string = sc.next();
System.out.println(string);
五、对象流
顾名思义:操作的数据是对象
序列化:将对象写入到本地文件中
反序列化:将本地文件中的对象读取出来。
对象流:
ObjectInputstream 对象输入流
ObjectOutputStream 对象输出流
注意:序列化对象必须实现serializable接口,否则不能序列化
对象中那些字段可以不序列化:
1 transient 修饰的字段
2 静态的字段
在要序列化类中添加字段,保证序列化和反序列化是同一个类
private static final long serialVersionUID = 100L;
六、properties类
是Map接口的一个实现类,是HashTable的一个子类
Properties集合中的元素是通过键值对存储
Properties特点:
1 存储属性名和属性值
2 属性名和属性值都是字符串
3 和流有关系
4 没有泛型
主要作用是后期配置文件的处理
虽然其存储元素是Object,但我们使用是都是配置文件,都会使用String类型,setproperties() getproperties()