什么是内存流和文件流?

作者&投稿:蹉光 (若有异议请与网页底部的电邮联系)
Delphi中内存流和文件流有什么区别~

流对于用户来说应该是没分别的,用户只是用流来保存和输出信息,而保存在什么介质位置,由系统来处理,或者由你自己手动编码选择。
内存流显然要比文件流速度快,但文件流的容量显然要比内存流大。

文件(File)和流(Stream)是既有区别又有联系的两个概念。
文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。
特性:每个文件都有文件名、文件所在路径、创建时间及访问仅限等属性。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。
存储介质:除了和磁盘文件直接相关的文件流以外,流还有多种类型。流可以分布在网络中、内存中或者是磁带中。

文件流 FileStream继承与Stream类,一个FileStream类的实例实际上代表一个文件流,使用FileStream类可以对文件系统上是文件进行读取、写入、打开和关闭操作。与ioStream、sStream共同作为头文件构成IO标准库。

内存流 MemoryStream表示的是保存在内存中的数据流,由内存流封装的数据可以在内存中直接访问。内存一般用于暂时缓存数据以降低应用程序对临时缓冲区和临时文件的需要。

引入内存流是因为内存流和字节数组虽然都位于程序缓冲区,但是具有不同特性。内存流相对于字节数组而言,具有流特有的特性,并且容量可自动增长,在数据加密以及对长度不定的数据进行缓存等场合,使用内存流比较方便。

扩展资料:

MemoryStream有多种构造函数如下:

1、public MemoryStream();该构造函数初始分配的容量大小为0,随着数据的不断写入,其容量可以不断地自动扩展。

2、public MemoryStream(byte[] buffer);根据字节数组buffer初始化,实例的容量大小规定为字节数组的长度。

3、public MemoryStream(int capacity);容量固定为capacity。



什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。
下面,笔者通过四个实例:EXE文件加密器、电子贺卡、自制OICQ和网络屏幕传输来说明Delphi编程中 "流 "的利用。这些例子中的一些技巧曾经是很多软件的秘密而不公开的,现在大家可以无偿的直接引用其中的代码了。
"万丈高楼平地起 ",在分析实例之前,我们先来了解一下流的基本概念和函数,只有在理解了这些基本的东西后我们才能进行下一步。请务必认真领会这些基本方法。当然,如果你对它们已经很熟悉了,则可以跳过这一步。

一、Delphi中流的基本概念及函数声明
在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法。
TStream类中定义的属性介绍如下:
1、Size:此属性以字节返回流中数据大小。
2、Position:此属性控制流中存取指针的位置。
Tstream中定义的虚方法有四个:
1、Read:此方法实现将数据从流中读出。函数原形为:
Function Read(var Buffer;Count:Longint):Longint;virtual;abstract;
参数Buffer为数据读出时放置的缓冲区,Count为需要读出的数据的字节数,该方法返回值为实际读出的字节数,它可以小于或等于Count中指定的值。
2、Write:此方法实现将数据写入流中。函数原形为:
Function Write(var Buffer;Count:Longint):Longint;virtual;abstract;
参数Buffer为将要写入流中的数据的缓冲区,Count为数据的长度字节数,该方法返回值为实际写入流中的字节数。
3、Seek:此方法实现流中读取指针的移动。函数原形为:
Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract;
参数Offset为偏移字节数,参数Origint指出Offset的实际意义,其可能的取值如下:
soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。
soFromCurrent:Offset为移动后指针与当前指针的相对位置。
soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。该方法返回值为移动后指针的位置。
4、Setsize:此方法实现改变数据的大小。函数原形为:
Function Setsize(NewSize:Longint);virtual;
另外,TStream类中还定义了几个静态方法:
1、ReadBuffer:此方法的作用是从流中当前位置读取数据。函数原形为:
Procedure ReadBuffer(var Buffer;Count:Longint);
参数的定义跟上面的Read相同。注意:当读取的数据字节数与需要读取的字节数不相同时,将产生EReadError异常。
2、WriteBuffer:此方法的作用是在当前位置向流写入数据。函数原形为:
Procedure WriteBuffer(var Buffer;Count:Longint);
参数的定义跟上面的Write相同。注意:当写入的数据字节数与需要写入的字节数不相同时,将产生EWriteError异常。
3、CopyFrom:此方法的作用是从其它流中拷贝数据流。函数原形为:
Function CopyFrom(Source:TStream;Count:Longint):Longint;
参数Source为提供数据的流,Count为拷贝的数据字节数。当Count大于0时,CopyFrom从Source参数的当前位置拷贝Count个字节的数据;当Count等于0时,CopyFrom设置Source参数的Position属性为0,然后拷贝Source的所有数据;
TStream还有其它派生类,其中最常用的是TFileStream类。使用TFileStream类来存取文件,首先要建立一个实例。声明如下:
constructor Create(const Filename:string;Mode:Word);
Filename为文件名(包括路径),参数Mode为打开文件的方式,它包括文件的打开模式和共享模式,其可能的取值和意义如下:

打开模式:
fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。
fmOpenRead :以只读方式打开指定文件
fmOpenWrite :以只写方式打开指定文件
fmOpenReadWrite:以写写方式打开指定文件
共享模式:
fmShareCompat :共享模式与FCBs兼容
fmShareExclusive:不允许别的程序以任何方式打开该文件
fmShareDenyWrite:不允许别的程序以写方式打开该文件
fmShareDenyRead :不允许别的程序以读方式打开该文件
fmShareDenyNone :别的程序可以以任何方式打开该文件

TStream还有一个派生类TMemoryStream,实际应用中用的次数也非常频繁。它叫内存流,就是说在内存中建立一个流对象。它的基本方法和函数跟上面是一样的。
好了,有了上面的基础后,我们就可以开始我们的编程之行了。


JAVA的输入输出流是指的什么啊?
在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流...本文的目的是为大家做一个简要的介绍。 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当...

内存流文件最大
4G,因为它使用的数据的长度为整型,整型最大可以表示4G。 这和物理内存之类的其实没有任何关系的。因为它可以进行交换。

流式文件是什么?
流”到下一行或下一页去,流式文件在不同的软硬件环境中,显示效果是会发生变化的。2、版式软件 Adobe就是典型的版式软件,所保存的PDF文档就是版式文件。版式文档不会“跑版”,在任何设备上显示和打印效果是高度精确一致的。版式文件形成后,不可编辑和篡改正文,只能在其上附加注释印章等信息。

c#中文件和流的本质区别是什么呀。。讲的通俗一点呀。。我是个新手...
你这里应该问文件操作和IO流的区别 流操作是个很泛的概念,也是一种普遍通行的理念,常见的流操作除了IO之外还有网络流(即上传和下载文件)。流操作的存在是为了解决体积大的数据占用内存太大,简单而言就是分段操作,是想一下,如果没有流操作的机制,如果你的内存有2GB,你要下载一下2GB的文件岂不...

c++中的“<<”“>>”表示什么?
两个大于号为向右移位,同理,两个小于号为二进制向左移位。(即乘以多少或除以多少)例如:int main(){ int a = 16;cout<<(a<<4)<<endl;cout<<(a>>4)<<endl;\/\/但是a的值并没有改变 a >>= 1;\/\/此时a的值改变了 cout<<a<<endl;cin>>a;return 0;} 输入的结果分别为256,1;...

C++中,ifstream和ofstream定义文件流的区别
区别一:本质不一样 1、ofstream是从内存到硬盘;2、ifstream是从硬盘到内存 区别二:实际应用不同 1、 ifstream默认以输入方式打开文件 2、ofstream默认以输出方式打开文件

苹果照片全部传到icloud_还会占内存吗
苹果照片上传到iCloud后,是否占用内存取决于照片流是否被删除。如果照片流被删除,那么照片流就不会占用iCloud储存空间。如果照片流没有被删除,那么它们会继续占用iCloud储存空间。如果删除了照片流以后仍然看到可用空间没有增加,可以尝试清理其他不需要的文件。 抢首赞 评论 分享 举报 为...

java中的输入输出流该怎么理解
那又怎样把放在外存这个容器内的数据读取到内存这个容器以及怎么把内存这个容器里的数据存到外存中呢? 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛: 标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将...

Mb(大写的M,小写的b)是指流量还是内存。eg:下载音乐时,高品音乐和流畅...
mb是一个量词他可以作为文件大小来形容也可以用来计流量,你下载一个5mb的文件就花费了等值的流量懂了吗,高品质的音乐因为音质更加的好所以文件更大自然也就更多mb

流式传输的简介
流式不仅使启动延时成十倍、百倍地缩短,而且不需要太大的缓存容量。流式传输避免了用户必须等待整个文件全部从Internet上下载才能观看的缺点。流媒体指在Internet\/Intranet中使用流式传输技术的连续时基媒体,如:音频、视频或多媒体文件。流式媒体在播放前并不下载整个文件,只将开始部分内容存入内存,流式...

宣汉县19370375426: 什么是内存流和文件流? -
殷勤呢安治: 什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向.流不但可以处理...

宣汉县19370375426: 文件和流的主要区别是什么? C# -
殷勤呢安治: 文件(FileStream)是流(Stream)的一种,或者说是流的派生,主要指存放于硬存储器的二进制序列.其他类型的流有:内存流(MemoryStream):存放于内存中的二进制序列; 网络流(NetworkStream):用于网络交互的文本序列; 声卡缓冲(SecondaryBuffer):音频数据; 显卡缓冲(VertexBuffer):三维顶点数据;等等...

宣汉县19370375426: Delphi中内存流和文件流有什么区别 -
殷勤呢安治: 流对于用户来说应该是没分别的,用户只是用流来保存和输出信息,而保存在什么介质位置,由系统来处理,或者由你自己手动编码选择.内存流显然要比文件流速度快,但文件流的容量显然要比内存流大.

宣汉县19370375426: delphi Delphi中内存流和文件流有什么区别?
殷勤呢安治: 按我的理解,流对于用户来说应该是没分别的,用户只是用流来保存和输出信息,而保存在什么介质位置,由系统来处理,或者由你自己手动编码选择.内存流显然要比文件流速度快,但文件流的容量显然要比内存流大.

宣汉县19370375426: Stream 怎么操作 -
殷勤呢安治: 常见并常用的stream一共有 文件流(FileStream),内存流(MemoryStream),压缩流(GZipStream),加密流(CrypToStream),网络流(NetworkStream);1.文件流(读取文件流-输出文件流)FileStream using(Streamstreamwrite=new ...

宣汉县19370375426: 如何理解JAVA中的流概念 -
殷勤呢安治: 一、概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网...

宣汉县19370375426: C语言中,文件的“流”到底是什么东西? 我才学完文件,现在想了解真理... -
殷勤呢安治: 流是指输入输出这个过程. 因为数据从设备读入内存和数据从内存写入磁盘的过程很像是数据在流动一样,所以就“形象” 地把这个过程称为“流”.流有很多种类的:比如字符串流、文件流等等.在C++里面, 流是一个对象,这个对象管理数据输入输出的细节. 相应的类 叫做流类.

宣汉县19370375426: 能说说DELPHI7的内存流和文件流区别吗 -
殷勤呢安治: 本质是一样的,只不过一个是存在磁盘上,一个是存在于内存中.像网络通讯程序一般就会用到内存流.

宣汉县19370375426: 将数据从文件中输入到内存中的流称为?() -
殷勤呢安治: 123456 数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一...

宣汉县19370375426: 请高手指点一句话(有关C++流的概念) -
殷勤呢安治: 文件则是操作系统组织数据的一种形式,与C++无关,更不等同于文件流.流是C++I/O库中引入的文件操作类,可以想象为流是从内存到文件(或者反之)的数据流.你要从文件中读入数据,就从这个文件到内存的流中提取数据(>>);要向文件中写入数据,就向内存到文件的流中插入数据(<<).而且屏幕和键盘也是可以被操作系统抽象为文件的,因此标准输入输出也可以使用流进行.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网