| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1087 人关注过本帖
标题:请教老师大侠:.NET 存储方式 有 3 种
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这三种是不同层次的外部数据使用方式,不是数据存储方式。

授人以渔,不授人以鱼。
2012-05-31 19:29
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
收藏
得分:0 
以下是引用TonyDeng在2012-5-31 19:29:24的发言:

这三种是不同层次的外部数据使用方式,不是数据存储方式。
噢?
我以为写入方式(streamWriter, sirealize) 就是 存储的意思呢。
2012-05-31 21:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
stream是流类,一种数据的处理方式,称为“流数据”,是顺序读写数据的意思,像水流,故称“流”。流方式可以用在内存和外存中的数据,从基础stream流类可以派生出字符串流和文件流,都是一种处理手法,与数据存放在什么地方无关。你说的这个streamWriter是流类中派生出来专用于输出(write)的子类。

序列化是一种把数据“复制”到某处(通常是外设文件),然后反序列化把数据原样取回的手法。比如把当前窗体的界面整个(包括文本框之类用户正在输入的数据)复制起来,在必要时复原,就可以使用这种方法。

数据库是不使用流处理数据的,属于一种随机存取的性质。

[ 本帖最后由 TonyDeng 于 2012-5-31 22:02 编辑 ]

授人以渔,不授人以鱼。
2012-05-31 21:56
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
收藏
得分:0 
以下是引用TonyDeng在2012-5-31 21:56:29的发言:

stream是流类,一种数据的处理方式,称为“流数据”,是顺序读写数据的意思,像水流,故称“流”。流方式可以用在内存和外存中的数据,从基础stream流类可以派生出字符串流和文件流,都是一种处理手法,与数据存放在什么地方无关。你说的这个streamWriter是流类中派生出来专用于输出(write)的子类。

序列化是一种把数据“复制”到某处(通常是外设文件),然后反序列化把数据原样取回的手法。比如把当前窗体的界面整个(包括文本框之类用户正在输入的数据)复制起来,在必要时复原,就可以使用这种方法。

数据库是不使用流处理数据的,属于一种随机存取的性质。
非常感谢 TonyDeng 老师 的讲解,受益匪浅!

再请教您:
1. streamWriter 是否也是 像 序列化 一样把数据“复制”到某处(通常是外设文件),并通过streamReader 去读取?
2. 文件的存取操作 与 序列化 都是 用“流”来处理数据的,这样理解对吗?
2012-05-31 22:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.steam类隐藏了向具体设备读写的底层细节,它的实际动作与输入输出的设备(是字符串还是内存、外存、磁带机等都不一样)有关,但你使用stream类(及其子类)的时候,不需要关心那些细节,运行库替你处理了。你平时用过的Write()向控制台屏幕输出,就使用了stream流库。

2.一般情形下可以这样理解,但具体也是不需要关心的。

类库的内部操作,通常是不需要程序员关心的东西,除非它设计不好。程序员需要考虑的,是使用哪一个类,视实际需要而定。

[ 本帖最后由 TonyDeng 于 2012-5-31 23:17 编辑 ]

授人以渔,不授人以鱼。
2012-05-31 23:05
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
收藏
得分:0 
以下是引用TonyDeng在2012-5-31 23:05:10的发言:

1.steam类隐藏了向具体设备读写的底层细节,它的实际动作与输入输出的设备(是字符串还是内存、外存、磁带机等都不一样)有关,但你使用stream类(及其子类)的时候,不需要关心那些细节,运行库替你处理了。你平时用过的Write()向控制台屏幕输出,就使用了stream流库。

2.一般情形下可以这样理解,但具体也是不需要关心的。

类库的内部操作,通常是不需要程序员关心的东西,除非它设计不好。程序员需要考虑的,是使用哪一个类,视实际需要而定。

太感谢 TonyDeng 老师,被解惑的心情太好了。
谢谢!!
2012-06-01 09:00
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
呵呵,T版忙完了?
T版的讲解更通俗一些,如果你学习过C++就好了,<iostream>就是C++中的输入(input)输出(output)流,所以称作IO输入输出,内部代码都是公开的,
如果你想了解这些流类的内部工作源理,都是可以翻看的,C#不提供这些源代码,所以在大部分国内新C#程序员如同T版所说,不需要去关心内部了。但
正是这些不需要,使得一些一上手就使用C#的程序员,出现对一些基本的概念理不清的问题。偶倒是很担心learnerok最后学习的效果不是很好,
缺少某些必要的知识,对于C#学习也只能是管中窥豹,也不知道learnerok学到集合类没有?建议在学习的时候,学习一下偶上次提供的《C#数据结构》一书。
否则对于某些集合类为什么必须实现一些接口函数会感到困惑。

拿文件数据流来说吧,其实源数据总是以“复制”的形式流向目的数据地,基本过程: 打开文件->读出文件数据->写入目的地->关闭文件。
试想一下,如果不是复制,让数据真正的移动到目的地后,产生什么后果?源数据消失没有了。从这个也可以推论出数据流总是以复制的方式进行的。

C#中网络流也可以通过stream类来进行读写,命名空间中还有一个BufferedStream类用于缓冲读写,缓冲区可提高读取和写入性能。

[ 本帖最后由 hellovfp 于 2012-6-1 11:00 编辑 ]

我们都在路上。。。。。
2012-06-01 10:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
初学者还是不要太早接触底层的好,只要用好了现成的类(或者VB中的函数和命令),把工作做起来,到某个时候,自然会有了解底层的需求,到时带着问题和经验去学,收效大得多。过早接触底层,只会令他们茫然的,被技术的细节扰乱,反而不知道如何做程序,那只能叫“知道”技术。现实中程序员大多数的时间,是面临某个需求时,知道使用什么类、函数、命令来解决问题,并把这些手段用好,这种经验积累到一定程度,自然会总结出某种规律,到时猜也能猜到底层运作,到了要学底层知识的时候,就可以结合实际的应用经验,明白底层这样做到底是为着什么目的,而最终,我们不过是学习将来自己如何用底层技术封装出需要的高层类、函数、命令,返回高抽象层次。写程序,太依赖底层其实是很狭窄的路子,费力大而收效微,而现在的计算机应用,大多已经不像以前那样是个人小打小闹可以做得来的了,从底层出发,每一个小的东西都要花费极大精力和时间,注定做不了大项目,充其量是工具性质的小程序。

[ 本帖最后由 TonyDeng 于 2012-6-1 11:28 编辑 ]

授人以渔,不授人以鱼。
2012-06-01 11:16
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
序列化这个东西最早偶在学习的时候也不明白是个啥玩意儿,问了一下偶的老师,也没有解释清楚,后来自己学习的时候查一些资料总算是弄明白了。
通常是和类相关的一个DD,学习中你就会遇到,如何把类转到客户区的浏览器中,再通过javascript进行类数据操作显示,用的就是序列化功能。
这种序列化说白了就是把类对象本身在内存中的数据保存下来,传输到另一个地方,然后通过反序列化将数据恢复成内存中的类对象。

仅仅是网络应用?后来通过知识的进一步学习,可以很方便的想到将内存中的对象数据状态保存在文件中,在需要的时候将对象状态恢复到内存中,可以实现游戏人物的状态存取。

我们都在路上。。。。。
2012-06-01 11:16
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 18楼 TonyDeng
T版说的也是,估计楼主还在C#慢慢探索的路上,还没有到需要了解底层的地步。
带着问题去学习往往能够得不错的效果。慢慢来吧。

我们都在路上。。。。。
2012-06-01 11:21
快速回复:请教老师大侠:.NET 存储方式 有 3 种
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013336 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved