精华内容
下载资源
问答
  • (1)标准输入输出标准输入设备和标准输出设备的输入输出简称为标准I/O (2)文件 对在外存磁盘上文件的输入食醋胡简称为文件I/O (3)字符串流 对内存中指定的字符串存储空间的输入输出简称为串I/O 2.什么...

    1.什么是I/O

    • 数据的输入和输出(INPUT/OUTPUT简写为I/O)
    • 3种类型的IO
      (1)标准输入输出流
      对标准输入设备和标准输出设备的输入输出简称为标准I/O
      (2)文件流
      对在外存磁盘上文件的输入输出简称为文件I/O
      (3)字符串流
      对内存中指定的字符串存储空间的输入输出简称为串I/O

    2.什么是流

    • 数据输出输出的过程,可以形象地看成流
    • 从流中获取数据的操作称为“提取”(输入,>>)操作
    • 从流中添加数据的操作称为“插入”(输出,<<)操作
    cin>>n		从标准输入获取变量n。从输入流到变量,称之为输入
    cout<<n		向标准输出插入数据变量n。从变量到输出流,称之为输出
    >>,<<箭头指向的方向代表了数据流动的方向
    
    • 标准IO,就有标准输入输出流
    • 文件IO,就有文件流
    • 字符串IO,就有字符串流

    3.流类库继承体系

    • ios类和streambuf是平行类,大部分流类都直接或间接继承至这俩类
      ios是与输入输出相关的类;streambuf是与缓冲区相关的类

    • ios_base是ios基类,给ios类提供了流状态,输入输出格式化的功能

    • istream类继承至ios,提供流的输入操作,是输入流,重载了>>

    • ostream输出流,重载了输出的操作,重载<<

    • iostream输入输出都有

    • 字符串输入流:istringstream(>>输入操作),字符串输出流ostringstrea(<<输出操作),字符串输入输出流stringstream(>>,<<操作),
      字符串的三个流与stringbuf是组合关系,也就是这三流类包含了stringbuf成员
      在这里插入图片描述

    • 流库具有2个平行的基类:streambuf和ios类,所有流类均以两者之一作为基类

    • streambuf类提供对缓冲区的低级操作:设置缓冲区、对缓冲区指针操作、向缓冲区存/取字符

    • ios_base,ios类记录流状态,支持对streambuf的缓冲区输入/输出的格式化或非格式化转换

    • strstreambuf:使用串保存字符序列。扩展streambuf在缓冲区提取和插入的管理
      字符串流缓冲区

    • 使用文件保存字符序列。包括打开文件:读/写、查找字符
      文件流缓冲区

    • 查看类定义
      在这里插入图片描述
      cin是istream类的一个对象,cout是ostream类的一个对象
      在这里插入图片描述
      在这里插入图片描述
      istream是basic_istream模板的一个特化,实际上真正的类应该是basic_istream<char, char_traits>;
      ostream是basic_ostream模板的一个特化
      在这里插入图片描述
      在这里插入图片描述
      basic_istream继承至basic_ios,并不是继承至ios
      在这里插入图片描述
      在这里插入图片描述
      实际上ios是basic_ios模板的一个特化
      在这里插入图片描述
      在这里插入图片描述
      清除流流状态
      在这里插入图片描述
      设置流状态
      在这里插入图片描述
      格式化操作
      在这里插入图片描述
      很多格式化操作可能由ios_base提供
      在这里插入图片描述
      格式化操作,科学计数法,输出宽度
      在这里插入图片描述

    • ostream
      在这里插入图片描述
      在这里插入图片描述
      插入运算符,布尔类型的输出操作
      在这里插入图片描述
      short类型的输出操作
      在这里插入图片描述
      其他,以此类推
      在这里插入图片描述
      在这里插入图片描述

    • eg:P58\01.cpp

    #include <iostream>
    
    using namespace std;
    
    //实际上是2个类对象
    // cout;
    // cin;
    
    
    int main(void)
    {
        int n;
        cout << n <<endl;//在ostream类中重载了<<运算符,以成员函数方式重载
    
        MyString str;
        cout<<str;//不能以成员函数的方式重载的原因是:不能去更改ostream类的代码,如果每增加一个类,就去更改类重载
                    //的代码,这样不好。
                    //所以要输出自定义的类,要重载<<插入运算符,要用友元的方式重载
        return 0;
    }
    
    • 为什么将ostream和istream看成是继承ios?
      在这里插入图片描述
      将basic_ios<_Elem, _Traits>用ios替换,把basic_istream用iostream替换。所以istream类继承至ios类。ostream类似
      在这里插入图片描述

    4.标准输入/输出流

    • C++为用户进行标准I/O操作定义了四个类对象:cin,cout,cerr和clog
      (1)cin为istream流类的对象,代表输入设备键盘,后3个为ostream流类的对象
      (2)out代表标准输出设备显示器
      (3)cerr(错误输出)和clog(位置输出)含义相同,均代表错误信息输出设备显示器

    • ostream流的操作
      (1)operator <<,插入运算符的重载
      (2)put(),输出
      (3)write(),输出

    • eg:P58\02.cpp

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        int n = 100;
        int n2 = 200;
        cout <<n<<" "<<n2<<endl;
        return 0;
    }
    
    • 测试:
      为什么可以连续使用<<操作?注意:<<的返回值,<<操作返回一个ostream对象的引用,以及<<操作的重载功能(默认情况下重载了一些基本类型)
      运算符重载返回的是对象的引用,运算符重载本质上是函数重载,cout <<n函数的返回值对象的引用(cout就是ostream类型),也还是cout对象,cout对象还可以继续输出
      在这里插入图片描述
      打断点,F9跟踪进去
      在这里插入图片描述
      输入F11,返回的是对象的引用
      在这里插入图片描述
      basic_ostream<_Elem, _Traits>实际上就是ostream类型
      在这里插入图片描述
    • eg:P58\03.cpp
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        int n = 100;
        int n2 = 200;
        cout <<n<<" "<<n2<<endl;
    
        //put是ostream类的一个成员函数
        //put方法的返回值也是ostream对象的引用,所以也可以连续使用
        cout.put('H');
        cout.put('i');
        cout.put(' ');
        cout.put('H').put('i').put('\n');
    
    
        return 0;
    }
    
    • 测试:
      put()操作
      输出单个字符
      返回一个ostream对象的引用
      cout.put(‘H’).put(‘i’);
      put方法的返回值也是ostream对象的引用,所以也可以连续使用
      在这里插入图片描述
      在这里插入图片描述
    • eg:P58\04.cpp
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        int n = 100;
        int n2 = 200;
        cout <<n<<" "<<n2<<endl;
    
        //put是ostream类的一个成员函数
        //put方法的返回值也是ostream对象的引用,所以也可以连续使用
        cout.put('H');
        cout.put('i');
        cout.put(' ');
        cout.put('H').put('i').put('\n');
    
    
        char buf[] = "test!!!!!";
        cout.write(buf, 5);
        return 0;
    }
    
    • 测试:
      write操作
      write(buf, len)
      write()返回一个ostream对象的引用
      cout.write(buf, len)//char buf[len],输出一个缓冲区,并指定缓冲区的长度
      在这里插入图片描述

    • istream流的操作
      (1)operator>>操作,重载了提取运算符>>
      (2)get()
      (3)getline()
      (4)read()
      (5)peek()
      (6)peek()
      (7)putback()

    • eg:P58\05.cpp

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        int n;
        char ch;
    
        cin>>n>>ch;
        cout<<"n="<<n<<" "<<"ch="<<ch<<endl;
        return 0;
    }
    
    • 测试:
      为什么可以连续使用>>操作?注意:>>的返回值,>>操作返回一个istream对象的引用,>>操作的重载功能

    在这里插入图片描述

    • eg:P58\06.cpp
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        // int n;
        // char ch;
    
        // cin>>n>>ch;
        // cout<<"n="<<n<<" "<<"ch="<<ch<<endl;
    
        int ch = cin.get();
        cout<<ch<<endl;
    
        char ch;
        cin.get(ch);
        cout<<ch<<endl;
    
        char ch1;
        char ch2;
        cin.get(ch1).get(ch2);
        cout<<ch1<<" "<<ch2<<endl;
    
    
        return 0;
    }
    
    • 测试
      get操作
      (1)读取单个字符
      (2)返回一个整数(输入的是字符,返回的是字符的ASCII码)
      (3)get对回车换行的处理
      get(char&)操作
      (1)读取单个字符
      (2)返回一个istream对象引用
      输出A的ASCII码值为65
      在这里插入图片描述
      获取一个字符A
      在这里插入图片描述
      get返回的是对象的引用,所以可以使用多次get
      在这里插入图片描述
    • eg:P58\07.cpp
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        // int n;
        // char ch;
    
        // cin>>n>>ch;
        // cout<<"n="<<n<<" "<<"ch="<<ch<<endl;
    
        // int ch = cin.get();
        // cout<<ch<<endl;
    
        // char ch;
        // cin.get(ch);
        // cout<<ch<<endl;
    
        // char ch1;
        // char ch2;
        // cin.get(ch1).get(ch2);
        // cout<<ch1<<" "<<ch2<<endl;
    
        //getline按行获取,即使遇到空白字符,也会提取到buf中
        //最多获取9个字符,还有1个是换行符
        //getline不接收换行符
        char buf[10] = {0};
        cin.getline(buf, 10);
        cout<<buf<<endl;
    
        //提取运算符>>遇到空白字符就停止
        char buf[10] = {0};
        cin>>buf;
        cout<<buf<<endl;
    
        return 0;
    }
    
    • 测试:
      getline操作,按行获取
      (1)读取一行,读取回车键
      (2)返回istream对象的引用
      (3)getline()操作与>>的区别:
      char string1[256];
      cin.getline(string1, 256);//get a whole line
      cin>>string1;//stop at the 1st blank space
      在这里插入图片描述
      在这里插入图片描述

    • eg:P58\08.cpp

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        // int n;
        // char ch;
    
        // cin>>n>>ch;
        // cout<<"n="<<n<<" "<<"ch="<<ch<<endl;
    
        // int ch = cin.get();
        // cout<<ch<<endl;
    
        // char ch;
        // cin.get(ch);
        // cout<<ch<<endl;
    
        // char ch1;
        // char ch2;
        // cin.get(ch1).get(ch2);
        // cout<<ch1<<" "<<ch2<<endl;
    
        //getline按行获取,即使遇到空白字符,也会提取到buf中
        //最多获取9个字符,还有1个是换行符
        //getline不接收换行符
        // char buf[10] = {0};
        // cin.getline(buf, 10);
        // cout<<buf<<endl;
    
        // //提取运算符>>遇到空白字符就停止
        // char buf[10] = {0};
        // cin>>buf;
        // cout<<buf<<endl;
    
        //read对空白字符照读不误
        char buf[10] = {0};
        cin.read(buf, 5);
        cout<<buf<<endl;
    
        return 0;
    }
    
    • 测试
      read(buf, len)
      返回一个istream对象的引用
      对空白字符照读不误

    在这里插入图片描述
    换行也会读取,a换行bcd
    在这里插入图片描述

    • eg:P58\09.cpp
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        char c[10], c2, c3;
        c2 = cin.get();
        c3 = cin.get();
        cin.putback(c2);//该例子来自vs,按下F11
        cin.getline(&c[0], 9);
        cout << c <<endl;
    
        return 0}
    
    • 测试
      peek与putback
      peek:查看而不读取
      putback:将一个字符添加到流
      输入流中有abcdefg
      将a获取到c2变量,将b获取到c3变量,此时流中只有cdefg,然后再把c2进行putback放回流中
      在这里插入图片描述
    展开全文
  • 13.2 标准输入流

    2019-11-11 20:26:38
    标准输入流:从标准输入设备(键盘)流向程序的数据。 一般而言使用cin流对象进行输入,例如: int a, b; cin >> a >> b; //从键盘输入2个整数 “>>”有什么特点: (1)符号重载(属于...

    标准输入流:从标准输入设备(键盘)流向程序的数据。

    一般而言使用cin流对象进行输入,例如:

    int a, b;

    cin >> a >> b;  //从键盘输入2个整数

    “>>”有什么特点:

    (1)符号重载(属于istream类的符号重载函数)

    (2)以空格、回车做分隔符(用这个符号无法得到空格)

     

    cin是istream类的对象,除了“>>”符号(其实是该cin对象的一个符号重载函数)以外,常用函数如下:

    (1)read :无格式输入指定字节数

    (2)get :从流中提取字符,包括空格

    (3)getline :从流中提取一行字符

    (4)ignore :提取并丢弃流中指定字符

    (5)peek :返回流中下一个字符,但不从流中删除

    (6)gcount :统计一共输入的字符个数

    (7)seekg :移动 输入流指针

    (8)tellg :返回输入流中指定位置的指针值(指定位置的地址值)

    展开全文
  • 标准输入输出

    2017-02-16 21:52:00
    * System.inInputStream, 标准输入流, 默认可以从键盘输入读取字节数据 * System.outPrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据 修 改标准输入输出流(了解) * 修改输入流: System....

     


    什么是标准输入输出流(掌握)

    * System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据

    * System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据


    改标准输入输出流(了解)

    * 修改输入流: System.setIn(InputStream)

    * 修改输出流: System.setOut(PrintStream)

    System.setIn(new FileInputStream("a.txt")); //修改标准输入流
    
    System.setOut(new PrintStream("b.txt")); //修改标准输出流
    
    InputStream in = System.in; //获取标准输入流
    
    PrintStream ps = System.out; //获取标准输出流
    
    int b;
    
    while((b = in.read()) != -1) { //从a.txt上读取数据
    
        ps.write(b); //将数据写到b.txt上
    
    }
    
    in.close();
    

     

    转载于:https://www.cnblogs.com/loaderman/p/6407743.html

    展开全文
  • JAVA基础(标准输入流

    千次阅读 2019-07-09 14:59:49
    System.inInputStream, 标准输入流, 默认可以从键盘输入读取字节数据 System.outPrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据 2,修改标准输入输出流 修改输入流: System.set...

    1,什么是标准输入输出流(

    • System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据

    • System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据

     

    2,修改标准输入输出流

    • 修改输入流: System.setIn(InputStream)

    • 修改输出流: System.setOut(PrintStream)

    【1】 SystemInOut

    public class Demo06_SystemInOut {
    
        public static void main(String[] args) throws IOException {
    
            //demo1();
    
            System.setIn(new FileInputStream("a.txt"));            //改变标准输入流
    
            System.setOut(new PrintStream("b.txt"));            //改变标注输出流
    
            
    
            InputStream is = System.in;                            //获取标准的键盘输入流,默认指向键盘,改变后指向文件
    
            PrintStream ps = System.out;                        //获取标准输出流,默认指向的是控制台,改变后就指向文件
    
            
    
            int b;
    
            while((b = is.read()) != -1) {
    
                ps.write(b);
    
            }
    
            //System.out.println();                                //也是一个输出流,不用关,因为没有和硬盘上的文件产生关联的管道
    
            is.close();
    
            ps.close();
    
            
    
        }
    
    
    
        public static void demo1() throws IOException {
    
            InputStream is = System.in;
    
            int x = is.read();
    
            System.out.println(x);
    
            
    
            is.close();
    
            
    
            InputStream is2 = System.in;
    
            int y = is2.read();
    
            System.out.println(y);
    
        }
    
    
    
    
    
    }

     

    3,修改标准输入输出流拷贝图片

    import java.io.FileInputStream;
    
    import java.io.FileNotFoundException;
    
    import java.io.IOException;
    
    import java.io.InputStream;
    
    import java.io.PrintStream;
    
    public class Test2 {
    
        public static void main(String[] args) throws IOException {
    
            System.setIn(new FileInputStream("元.jpg"));            //改变标准输入流
    
            System.setOut(new PrintStream("copy.jpg"));             //改变标准输出流
    
            
    
            InputStream is = System.in;
    
            PrintStream ps = System.out;
    
            
    
            byte[] arr = new byte[1024];
    
            int len;
    
            
    
            while((len = is.read(arr)) != -1) {
    
                ps.write(arr, 0, len);
    
            }
    
            is.close();
    
            ps.close();
    
        }
    
    }
    
    

     

     

    展开全文
  • 写到磁盘上,但是输入流缓冲区有什么作用,比如getc、fgets之类的函数总  需要马上将字节读入到参数buf上,这和不适用缓冲区的read函数有什么 区别?这个问题思考了很久了,希望有大神解惑。
  • readLine()读取一行,控制台什么都没有,readLine()怎么知道换行符在哪里,怎么停止下来, 所有就会等待用户输入,如果直接就输入回车,那么readLine()方法就马上执行完了, 所有当我输入回车后,readLine...
  • System.inInputStream,标准输入流,默认可以从键盘输入读取字节数据。 System.outPrintStream,标注输出流,默认可以向Console中输出字符和字节数据。 2.修改标准输入输出流 修改输入流:System.setIn...
  • System.inInputStream, 标准输入流, 默认可以从键盘输入读取字节数据 System.outPrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据 2.修改标准输入输出流(了解) 修改输入流: System.setIn...
  • [JAVA]标准输入流笔记1

    2017-04-26 23:19:51
    主要是什么时候输入结束,才能把相应个数的数输入数组中。对这方面真的不是很了解,平时感觉很小的问题到了考试的时候才发现一脸懵逼,所以感觉还是多做笔记,不要以为不起眼就不好好弄,一定要懂得细节决定成败,多...
  • * System.inInputStream, 标准输入流, 默认可以从键盘输入读取字节数据 * System.outPrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据 2.修改标准输入输出流(了解) * 修改输入流: System.set...
  • Java(2)-Java IO输入输出

    万次阅读 多人点赞 2012-04-01 11:28:55
    Java中I/O操作主要指使用Java进行输入,输出操作.Java所有的I/O机制都基于数据进行输入输出,这些数据表示了字符或者字节数据的流动序列。Java的I/O提供了读写数据的标准方法。任何Java中表示数据源的...
  • 什么叫流  流就是程序和设备之间嫁接起来的一根用于数据传输的...字节输入流:InputStream 字节输出流:OutputStream 字符输入流:Reader 字符输出流:Writer 注:抽象流实质上就是抽象类,实际上使用到的继承...
  • 学习标准输入输出,我们都会遇到一个概念,和缓冲区,但到底什么是流什么是缓冲区呢? 书《C Primer Plus》上说,C程序处理一个而不是直接处理文件。后面的解释十分抽象:『(stream)一个理想化的数据...
  • 2:流是什么 3:c++IO流 4:文件流对象 一:c语言的输入与输出 C语言中用到最频繁的输入输出方式就是scanf()与printf()。scanf()是从标准输入设备读取数据,并将值存放在变量中。printf()是将指定的文字/字符串...
  • 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推. 相当于将多个管道整合成一个管道。 2.使用方式 整合两个: SequenceInputStream...
  • 什么是序列流  * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推.* 2.使用方式  * 整合两个: SequenceInputStream(InputStream, ...
  • 什么是字节  IO中的一种, 可以用来读写字节数据.  2.字节和字符的区别  计算机中存储任何数据都以字节的形式, 所以字节可以读写任意类型的数据.  在读写的数据字符的时候, 用字符更方便. ...
  • 学习标准输入输出,我们都会遇到一个概念,和缓冲区,但到底什么是流什么是缓冲区呢? 书《C Primer Plus》上说,C程序处理一个而不是直接处理文件。后面的解释十分抽象:『(stream)一个理想化的数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,223
精华内容 489
关键字:

标准输入流是什么