日期:2014-05-17  浏览次数:20920 次

请问,FileStream.Read方法
FileStream.Read方法:MSDN从流中读取字节块并将该数据写入给定缓冲区中。

我想问的是,FileStream读取数据到缓冲区,是以什么编码方式读取的呢?不指定吗?而且没有其他重载方法。

------解决方案--------------------
和编码无关。

之间回答过你了,你没有理解,所谓编码,就是对数据的解释。比如65这个原始的数字,在ASCII编码里面,理解为A这个字符。

FileStream读取的是原始的数据,不涉及对数据代表什么的解释。
------解决方案--------------------
因为你要把字符串写到文件中啊。

“字符串”是一个抽象的概念,你就需要编码去约定它应该被以什么形式记录下来。
------解决方案--------------------
编码不理解么?比如说“邮政编码”。

100859是一个北京市某区域的邮政编码,比如说代表北京市复兴路。
那么如果你要把“北京市复兴路”这个地址用一个数字记录下来,那么就需要邮政编码(当然你也可以用Unicode编码保存这个地址字面值)。

反之,当你从文件中读取到100859,你就需要解码,也就是解释这个数字是什么含意。它可能是一个叫张三的qq号,也可能是一个很大的数字,或者一个电话号码,但是在这里,我们当作邮政编码理解,对应的含义就是“北京市复兴路”。

FileStream的读取就相当于我们只取得这个数字,而不对它解释,所以和编码无关。当你要用它和地址转换的时候,你才需要邮政编码。
------解决方案--------------------
再比如说,莫尔斯电报编码。

你在很多电视电影中都能看到这样的情节,一个发报员不断按动发报键,发出滴滴滴长短不一的声音。

假设你不懂莫尔斯编码,那么这不妨碍你听见这些声音,只是你无从知道这些声音对应的文本信息是什么,换言之电报里面说了什么。

如果你需要把电报内容发出去,或者接收到信号去解析这个信号是什么电报内容,你就需要编码/解码。
------解决方案--------------------
FileStream是文件流,可以简单理解为一组字节序列,是基于byte的。byte中既可以存放文本,也可以存放非文本。比如有的文件是文本文件,也有的是非文本文件(图片、rar文件等)。byte和字符之间存在多种转换方式,通常来说就是编码方式,比如gb2312、utf-8、ascii等。如果你操作的是基于文本的文件,需要指定一种编码方式;如果你操作的是非文本文件,则一般不需指定编码方式。
------解决方案--------------------
探讨

引用:
因为你要把字符串写到文件中啊。

“字符串”是一个抽象的概念,你就需要编码去约定它应该被以什么形式记录下来。

为什么下面的代码,又不需要编码?也是字符串啊


FileStream fs = new FileStream("e:\\6.txt", FileMode.Open);
byte[] temp = new byte[fs.Length]……

------解决方案--------------------
我想问的是,FileStream读取数据到缓冲区,是以什么编码方式读取的呢?不指定吗?而且没有其他重载方法。

1,默认编码为System.Text.UTF8Encoding
2,重载方法很多 一般情况默认就行了如果乱码在指定编码格式


------解决方案--------------------
FileStream 是不 行的 
StreamReader 可以指定编码格式 详细的 你去看看 MSDN 就得了