​令人有点困惑的——文件流

无论是C++还是Java,或者是vb,其中都有对文件的操作,而这些当然是离不开我们的文件流了。然而,这个文件流却始终给人困惑,单凭猜想,实在是不能很快理解它的含义,或者是它的形象描述。首先,从对于这个文件流的困惑来谈起。

那么究竟有哪些困惑呢?

第一点:

输入流与输出流的差别。

书上很明了的说了,输入流与输出流是相对于内存而言的,流向内存的流,我们叫做输入流,流出内存的,我们叫输出流。

那么怎样是从内存中流出呢?

是不是FileOutputStream fout = newFileOutputStream(filename),这是输出流创建过程。我们惯有的思维应当是,既然是创建了一个输出流,那么接下来就看看到底是怎样一个输出法。

一般在实际的程序中,在这句话的后面,会有这样的话:fout.write(-1);fout.close();看到这两句话,给人的直观感受是,fout调用它自己的write方法,并且往其中传递了一个“-1”的常量,最后就关闭了。这个关闭我们会直接把它理解为,fout这个变量的关闭,在这句话之后我们是不会在程序中看到,fout还在继续的使用。那么这几句话合起来的意思就是,把叫做filename的文件,传递到fout流中,再写了一个常量“-1”进去,再关闭。

再看看输入流:fileinputStream fin = new FileinputStream(filename);I=fin.read();fin.close();

三句话的过程与fout的相同,是一个格式。都是在第二步的时候调用了一个函数。我们通常会将注意力集中到fin和fout上。

输入流的一个过程是将自身的值赋值给了I,难道这就是传说中的输入到I。fout.write(-1),难道这就是将“-1”输出。那么内存到哪里去了?这个write好像看起来更像是输入啊,而这个read看起来却更像是输出。不是常说“读出”吗?怎么输入里面有输出,而输出里面有输入?内存到底在哪里,难道是由fin或者是fout代表的吗?之后的考虑会更加的复杂,但是却没有实际真实的情况复杂。

第二点:

流为什么总是要关闭,难道用了这个关闭才能体现出流的高大上。好像,输入了就输入了么,输出就输出了么。程序运行完了自动关闭不行吗?

要想解决这些困惑,只要肯认真思考,积极实践,尤其是自己动手编一编。最终是会找到答案的。但是对于初学者,加上内存这个高深的词总能给人以无尽的遐想,令人不忍相信自己很容易就做出的判断。

那么再介绍一点关于内存的知识。

内存,就是一个中转站,他存储我们当前正要使用的信息。就好比一个人,他的大脑中存储了很多的记忆,但此刻想起来的,此刻所“知道的”仅仅是记忆茫茫大海中的一小部分。而存储这一小部分的东西,就是内存。就好像是记忆上面的记忆,而这个记忆是灵活多变的。人和电脑很灵活,全凭了这部分灵活的记忆。而这部分灵活的记忆是从那固定的“大海”中取得的。就像是从大海中流过来的一样。内存,其实就是大海中的那段细流。

在这里要声明的是,文件存在于大海中,用文件流把它“舀”起来。你可选择往流中加入你的思念。或者把流直接喝掉。当加入你的思念之后,你会想着把它放回大海,而喝掉之后,就停留在你的肚子里了。

现在言归正传。

文件流,就是将用户与文件连接起来的东西。连起来之后,用户就可以操作这个流了。如果是想改变文件的内容(加入你的思念),那就使用输出流。如果是想使用文件的内容(把水喝掉),那就使用输入流,使用了输入流,运用输入流的方法(就是其中的函数),将内容读取出来fin.read(),赋给一个变量进行使用I=fin.read()。输出流的方法自然是可想而知的了。

文件流是一种连接,没有它,用户不能使用文件的内容。不用它时,就把它释放掉。程序的环境就会和谐很多。因为这个时候相互之间没有影响,而且,程序少使用一点资源,轻松很多!

时间: 2024-08-02 23:36:22

​令人有点困惑的——文件流的相关文章

C++文件流

文件流:以文件为输入输出对象的流 #include<fstream> 一.文件操作打开一个输入或输出文件 1.打开一个输出文件 ofstream fout; fout.open("1.txt"); 2.打开一个输入文件 ifstream  fin; fin.open("2.txt"); 3.打开一个文件,既可以输入也可以输出 fstream finout: finout.open("3.txt"): 更便捷方式   ofstream

文件流:&quot;fopen&quot;,&quot;fclose&quot;,“ftell”&quot;fseek&quot;,&quot;fgets&quot;,&quot;fprintf&quot; ,“feof”,&quot;fwrite&quot;,&quot;fread&quot;

char const* filename="D:/hello.txt"; "fopen", FILE *fp=fopen(char const *name,char const mode); e.g:FILE *fp = fopen(filename,"wb"); 打开文件流,name为要打开文件的路径,如这里的filename:mode 为对文件的操作模式,通常使用:"wb"(写操作),"rb"(读操作)

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

JAVA学习--文件流FileInputStream和FileOutputStream操作

* 1.流的分类: * 按照数据流向的不同:输入流  输出流 * 按照处理数据的单位的不同:字节流  字符流(处理的文本文件) * 按照角色的不同:节点流(直接作用于文件的)  处理流 *  * 2.IO的体系 * 抽象基类            节点流(文件流)                                缓冲流(处理流的一种) * InputStream        FileInputStream            BufferedInputStream * Outp

编程中的文件流

最近在看JAVA核心技术,本以为想看懂一些文件流,还有一些东西,但是自己没有理解. 这里我在网上总结的一些文件流的知识,希望可以对大家理解有帮助!!    什么是流? 流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向.流不但可以处理文件,还可以处理动态内存.网络数据等多种数据形式.如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的.

C#四种文件流的区别

1.FileStream类的读写操作 FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率. 代码实例: //创建文件读取对象 using(FileStream fileReader=new FileStream (文件的物理路径,FileMode.Open)) { //创建文件写入对象 using(FileStream fileWrite=new FileStream (需要保存的文件物理路径+文件后缀名,Fil

重要的几种流:文件流、缓冲流、转换流!

一.文件流(字节流,字符流) 1.字节流 package com.zijie; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestFileInputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null

FrameWork:文件流操作

文件和流 绝对路径:E:\msd1508\Framework\Day05\Day05笔记.txt相对路径:从当前路径出发,到目的地的路径 假设当前路径是Day04 ..\Day05\Day05笔记.txt 网络路径 Using System.IO; File/FileSystemInfo 文件(文件操作方法) Directory/DirectoryInfo 目录(目录操作方法) DriveInfo 磁盘(磁盘操作方法) stream 流/抽象基类 FileStream 文件流/字节方法读写 St

c++文件流的基本操作

C++编程语言在实际编程中,对于文件的操作是一个比较简单的操作,大家可以通过一些简单的实例就能充分的掌握这一应用技巧,并在实际编程中给自己的程序开发带来一些帮助.下面就让我们一起来看看C++文件流操作的相关应用技巧吧. C++文件流操作之文件写入: #include < fstream> #include < iostream> using namespace std; int main(){ string str; ofstream out("d.txt");