常见IO相关函数
[TOC]
概述
IO分类:
- 按照数据流向,可以分为输入流和输出流。
- 按照数据类型,可以分为字符流和字节流。
程序的输出输入一般都由两种方式来组成,一种是字节流的输入输出操作,一种是字符流(串)的输入输出。
Java 语言的 IO
按照字节流可以划分为InputStream
,OutputStream
,分别负责字节流的输入输出。按照字符流划分为 Reader
,Writer
,分别负责字符的输入与输出。见下表:
Java 基本输入输出 | 输入 | 输出 |
---|---|---|
字节流 | InputStream |
OutputStream |
字符流 | Reader |
Writer |
C++ 的IO
通过输入输出符号,可以操作字符流,通过 read/write 方法可以操作字节流
C++ 基本输入输出 | 输入(std::istream ) |
输出(std::ostream ) |
---|---|---|
字符流 | >> |
<< |
字节流 | std::stream::read() |
std::ostream::write() |
标准输入输出
针对标准输入输出的字符操作常见函数如下:
// 从输入读取一个字符
int getc(FILE *_Stream);
// 从标准输入中读取一个字符(可以是回车或者空格之类的空白字符)
int getchar();
// 从标准输入读取一个字符串(直到遇到文件结束符EOF,或者回车符),将回车符换成'\0'
char* gets_s(char* _Buffer, rsize_t _Size);
// 从文件中获取一个字符
int fgetc(FILE *_Stream);
// 从文件中获取一个字符串,空格、tab不会结束读取,碰到回车或者eof会结束,并且回车或者eof会同时读取到buff
char* fgets(char* _Buffer, rsize_t _MaxCount, FILE* _Stream);
// 写入一个字符到文件流
int putc(char _Character, FILE *_Stream);
// 写入一个字符到文件流,同上。
int fputc(char _Character, FILE *_Stream);
// 写入标准输入中一个常量字符串,自带回车符
int puts(const char * _Buffer);
// 文件流中写入一个常量字符串
int fputs(const char * _Buffer, FILE* _Stream);
字符流输入输出
#include <sstream>
#include <iostream>
#inlcude <string>
std::string str = "hello world.";
istringstream iss(str);
std::string word1, word2;
// 将流中的数据输入到内存中(word1,word2变量)
iss >> word1 >> word2;
std::cout << word1 << word2 << std::endl;
文件流输入输出
#include <fstream>
#include <cstdio>
ifstream ifs("./a.txt");
std::string data;
// 将碰到空白符(空格、tab、回车)之前的数据存储到data.
ifs >> data;
// 读取一行数据到 data.
std::readline(ifs, data);
// 输入流迭代器的尾后指针.
std::istream_iterator<std::string> eos;
// 初始化输入流迭代器为文件流.
std::istream_iterator<std::string> iter(ifs);
while (iter != eos) {
// 输入流迭代器只能“被赋值”,输出流迭代器则只能"赋值"。
data = *iter;
++iter;
}
// 初始化标准输出的输出流迭代器,分隔符为","(每输出一次自动追加分隔符)
std::ostream_iterator<std::string> oiter(std::cout, ",");
*oiter = "hello";
++oiter;
*oiter = "world.";
套接字流输入输出
没有套接字的输入输出流,需要扩展输入输出流相关类:streambuf、ostream
留言