JAVA 中的 IO流、字节流、字符流、缓冲流、转换流、序列流、打印流(六)

110 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.2 InputStreamReader

是字节流通向字符流的桥梁,它使用指定的charset读取字节将其解码为字符

构造方法:
  • InputStreamReader(InputStream in)
  • InputStreamReader(InputStream in, String charsetName)
使用步骤:
  1. 创建InputStreamReader对象
  2. 调用read方法
  3. 释放资源
练习
InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\test\\utf-8.txt"), "UTF-8");
String line;
int len=0;
while ((len = isr.read()) != -1) {
	System.out.print((char) len);
}
isr.close();
PS:编码换成“GBK”则会乱码

第五章:序列流

1.1 ObjectOutputStream

把对象以流的方式写入到文件中

构造方法:
  • ObjectOutputStream(OutputStream out)
特有的成员方法:
  • void writeObject(Object obj) 将指定对象写入ObjectOutputStream
使用步骤:
  1. 创建ObjectOutputStream对象,传入字节输出流
  2. 使用ObjectOutputStream中的writeObject方法,把对象写入文件中
  3. 释放资源
# Person类
public class Person implements Serializable {
	private String name;
	private int age;
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

# main
public static void main(String[] args) throws IOException {
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\test\\obj.txt"));
	oos.writeObject(new Person("赵丽颖", 18));
	oos.close();
}
注意:Person类需要implements Serializable 类才能序列和反序列化

1.2 ObjectInputStream

简述:把文件中保存的对象以流的方式读取出来

构造方法:
  • ObjectInputStream(InputStream in)
特有的成员方法:
  • Object readObject()
使用步骤:
  1. 创建ObjectInputStream对象,传入字节输入流
  2. 使用ObjectInputStream中的readObject方法读取保存对象的文件
  3. 释放资源
  4. 使用读取出来的对象
练习
// 读取上个练习存入的对象(重写了toString方法)
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\test\\obj.txt"));
Object readObject = ois.readObject();
ois.close();
System.out.println(readObject);

// 将读取出来的对象强转成Person类型,然后进行使用
Person p = (Person) readObject;
System.out.println(p.getName() + ", " + p.getAge());

# 输出
Person [name=赵丽颖, age=18]
赵丽颖, 18

第六章:打印流

简述:平时我们调用 print 和 println 方法完成的,这两个方法都来自于 java.io.PrintStream 该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。

1.1 PrintStream

构造方法:
PrintStream(File file) 		// 输出的目的地是一个文件
PrintStream(OutputStream out)	// 输出的目的地是一个字节输出流
PrintStream(String fileName)	// 输出的目的地是一个文件路径
练习
public static void main(String[] args) throws FileNotFoundException {
	PrintStream ps = new PrintStream("E:\\test\\p.txt");
	ps.write(97);// 使用继承的write方法写入,结果:a

	ps.println(97); // 97
	ps.println("HelloWorld");
	ps.println(8.8);
	ps.println(true);
	// 释放资源
	ps.close();
}
改变打印流向:
PrintStream p2 = new PrintStream("E:\\test\\p.txt");
System.out.println("在控制台输出");
System.setOut(p2); // 把输出语句的目的地改变为打印流的目的地
System.out.println("在打印流的目的地输出");
// 释放资源
p2.close();

总结

在这里插入图片描述