首页 > 代码库 > ​令人有点困惑的——文件流

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

    技术分享

    无论是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()。输出流的方法自然是可想而知的了。

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

本文出自 “海流之石” 博客,转载请与作者联系!

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