15.3.2 将流连接在一起

2013-10-07 15:35:32 · 作者: · 浏览: 74

15.3.2  将流连接在一起

任何输入和输出流之间都可以建立连接,从而实现"访问时刷新"的行为。换句话说,当从输入流请求数据的时候,连接的输出流会自动刷新。这种行为可用于所有流,但是对于互相可能存在依赖关系的文件流来说特别有用。

通过tie()方法完成流的连接。要将输出流连接至一个输入流,对输入流调用tie()方法,并且传入输出流的地址。要解除连接,传入nullptr。

下面的程序将一个文件的输入流连接至一个完全不同的文件的输出流。您可以连接至同一个文件的输出流,但是双向I/O(详见稍后的描述)可能是实现同时读写同一个文件的更优雅的方式。

  1. ifstream inFile("input.txt");  
  2. ofstream outFile("output.txt");  
  3. // Set up a link between inFile and outFile.  
  4. inFile.tie(&outFile);  
  5. // Output some text to outFile. Normally, this would  
  6. // not flush because std::endl was not sent.  
  7. outFile << "Hello there!";  
  8. // outFile has NOT been flushed.  
  9. // Read some text from inFile. This will trigger flush()  
  10. // on outFile.  
  11. string nextToken;  
  12. inFile >> nextToken;  
  13. // outFile HAS been flushed.  
  14.  

在ostream基类上定义flush()方法,因此可将一个输出流连接至另一个输出流:
  1. outFile.tie(&anotherOutputFile); 

这种关系意味着:每次写入一个文件的时候,发送给另一个文件的缓冲数据会被写入。可以通过这种机制保持两个相关文件的同步。

这种流连接的一个例子是cout和cin之间的连接。每当从cin输入数据的时候,cout都会自动刷新。