包装类

与节点流类不同,包装类不直接操作目标设备,而是间接调用节点流类,接受一个对应具体溜对象提供各种往输出流对象中写入各种类型数据的方法。

1. DataOutputStream和DataInputStream类,允许以某种方式写入和读取包装类。

2. BufferedInputStream和bufferedOutputStream类:缓冲区包装类

缓冲流为IO增加内存缓冲区,可以一次操作多个字节,这两个类会在字节的实力对象中创建缓冲区。相应的字符流包装类为BufferedReader和BufferedWriter。

习题:分别使用DataOutputStream的writeUTF,writeBytes,writeChars方法,并包装BufferedOutputStream类一起用,多个流对象形成链称为流栈。

import java.io.*;
//习题分别使用DataOutputStream的writeUTF, writeBytes, writeChars方法,使用流栈,多个流对象形成的链成为流栈,包装类包装了另一个包装类
public class TestDataStream {
	public static void main(String [] args) throws Exception
	{
		FileOutputStream fos = new FileOutputStream("TestDataStream.txt");
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		DataOutputStream dos = new DataOutputStream(bos);
		dos.writeUTF("中国ab");
		dos.writeBytes("中国ab");
		dos.writeChars("中国ab");
		dos.close();
		
		FileInputStream fis = new FileInputStream("TestDataStream.txt");
		BufferedInputStream bis = new BufferedInputStream(fis);
		DataInputStream dis = new DataInputStream(bis);
		System.out.println(dis.readUTF());
		byte[] b = new byte[1024];
		int len = dis.read(b);
		System.out.println(new String(b, 0, len));
		dis.close();
	}
}
3. printSteam类为输出流添加打印各种数据的功能

System.out就是这个类型的

4. ObjectInputStream和ObjectOutputStream类:用于读取和写入对象类型的数据

其中被读取的对象类必须实现Serializable,编程可序列化的对象,且对象中的transient和static成员变量不会被读取和写入。

习题:创建一个可序列化的类,并写入文件并读取。

import java.io.*;
public class TestObjectInputStream {
	public static void main(String [] args) throws Exception
	{
		Student stu1 = new Student("zhangsan", 24, "自动化");
		Student stu2 = new Student("lisi", 25, "计算机");
		FileOutputStream fos = new FileOutputStream("TestObjectInputStream.txt");
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		oos.writeObject(stu1);
		oos.writeObject(stu2);
		oos.close();
		
		FileInputStream fis = new FileInputStream("TestObjectInputStream.txt");
		ObjectInputStream  ois = new ObjectInputStream(fis);
		stu1 = (Student)ois.readObject();
		stu2 = (Student)ois.readObject();
		System.out.println(stu1.name+":"+stu1.age+"major in"+stu1.major);
		System.out.println(stu2.name+":"+stu2.age+"major in"+stu2.major);
		ois.close();
	}
}
class Student implements Serializable
{
	String name ;
	int age;
	String major;
	Student(String name, int age, String major)
	{
		this.name = name;
		this.age = age;
		this.major = major;
	}
	
}
5.InputStreamReader和OutputStreamWriter类

前者是将字节流中的字节解码成字符后读取

后者是将字符编码成字节后写入字节流

实现字符流和字节流的转换

为避免频繁的转换,通常使用bufferedWriter和BufferedReader包装起来使用

另外之前所述的所有对应的字符流类都是包装类,道理一样。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值