I/O流的常用基类

I/o的四个基类:

字节流常用抽象基类:InputStream,OutputStream

字符流常用抽象基类:Reader,Writer

对于InputStream/Reader而言,他们把输入设备抽象成一个“水管”,这个“水管”里的每一个“水滴”就是一个输入流。

输入流使用隐式的记录指针来表示当前正准备从哪个“水滴”开始读取,每当程序从InputStream或Reader里读取一个或者多个“水滴”后,记录指针自动向后移动

对于OutputStream/Writer而言,他们同样把输入输出设备抽象成“水管”,只是这个水管里面没有任何水滴。当执行输出时,程序相当于一次把”水滴“放入到水管中,输出流采用隐式指针来标识当前水滴即将放入的位置,每当程序向OutputStream/Writer里输出一个或者多个水滴之后,记录将自动向后移动。

 

I/o流的所有类都是由这四个基类派生出来的由这四个类派生出来的子类名称都是以其父类名作为子类的后缀。

如:InputStream的子类FileInputStream

       Reader的子类FileReader

 

字节流和字符流的对比:

       字节流由字节组成,主要处理二进制数据,它是按字节来处理的流。

       我们日常处理的很多数据,都是文本,所以在字节流之外,又提出了字符流的概念,直接按照Java虚拟机的encode来处理,也就是在输出流和输入流之间 进行字符集的转换

       字节流可以处理任何对象而字符流只能处理字符,字符串等。但是在处理字符对象时字符流更加方便。

 

I/o的四个基类都是抽象的所以在不能直接使用基类创建对象,需要使用这四个基类的子类来创建对象。

比如想要将一个文本的Test13的内容写入b.txt。就要借助字符流基类Reader的子类FileReader和Writer的子类FileWriter

代码事例:

 

通过Reader的子类和writer将Test13.java的内容copy到了b.txt中

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您的这段代码演示了如何使用多态(Polymorphism)实现基类指针指向派生类对象,调用派生类中的方法。 在您的代码中,`People` 类是一个基类,`Teacher` 类是 `People` 类的派生类。`People` 类中有一个虚函数 `display()`,`Teacher` 类继承了 `People` 类,并重写了其虚函数 `display()`。 在 `main()` 函数中,首先创建了一个 `People` 类型的指针 `p`,指向一个 `People` 类型的对象,然后调用 `display()` 方法。接着,将 `p` 的指向修改为 `Teacher` 类型的对象,并再次调用 `display()` 方法,此时将会调用 `Teacher` 类中重写的 `display()` 方法。 以下是您的代码的完整示例: ```cpp #include <iostream> using namespace std; class People { public: string name; int age; virtual void display() { cout << "My name is " << name << ", I am " << age << " years old." << endl; } People(string _name, int _age) { name = _name; age = _age; } }; class Teacher : public People { public: int salary; void display() { cout << "My name is " << name << ", I am " << age << " years old. My salary is " << salary << " RMB." << endl; } Teacher(string _name, int _age, int _salary) : People(_name, _age) { salary = _salary; } }; int main() { People* p = new People("王志刚", 23); // p原本为基类的指针 p->display(); p = new Teacher("赵宏佳", 45, 8200); // 将派生类指针幅值给p p->display(); return 0; } ``` 输出结果为: ``` My name is 王志刚, I am 23 years old. My name is 赵宏佳, I am 45 years old. My salary is 8200 RMB. ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值