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

请问,这个BinaryWriter类的用法
BinaryWriter类:MSDN以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。

这个MSDN的解释,是不是说BinaryWriter类是将数据以二进制的形式写入文件,在文件中显示的是0、1组成的东西?

再看MSDN的这个例子:

class MyStream
{
  private const string FILE_NAME = "Test.data";

  public static void Main()
  {
  if (File.Exists(FILE_NAME))
  {
  Console.WriteLine("{0} already exists!", FILE_NAME);
  return;
  }
  using (FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew))
  {
  using (BinaryWriter w = new BinaryWriter(fs))
  {  
  for (int i = 0; i < 11; i++)
  {
  w.Write(i);
  }
  }
  }
  using (FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read))
  {
  using (BinaryReader r = new BinaryReader(fs))
  {
  for (int i = 0; i < 11; i++)
  {
  Console.WriteLine(r.ReadInt32());
  }
  }
  }
  }
}

上面的代码,想文件写入0----10的数字,再读取出来,读出来也是0----10的数字,。整个过程和StreamWriter和StreamReader不是一样吗?能说明BinaryReader 有什么特殊吗?怎么体现出它是以二进制写入文件的呢?
这几天对BinaryReader 、BinaryWriter,简直不懂...

------解决方案--------------------
当存储一些特殊类型时,就可以利用BinaryReader ,你比如说图片

举个例子,在sql数据库中存储图片,怎么办?虽然数据库中有Image类型,但是Image数据类型存储的是长度不确定的二进制数据,那么在存储图片到数据库的时候,就要先将图片转化为二进制流,然后存入Image

调取图片的时候再以流的形式读出转换成图片

而对于一般的类型,字符串等都有相应的存储类型,也没必要以流读取

个人觉得只是为数据的通用存储以及读取提供了一种便利。
------解决方案--------------------
探讨

BinaryReader类:MSDN,用特定的编码将基元数据类型读作二进制


从MSDN的解释,BinaryReader是将数据读成二进制值,那读出来就应该是二进制值啊,只有0、1那种,怎么又是字符串呢?

------解决方案--------------------
BinaryReader 、BinaryWriter其实只是方便你用二进制方式读写int,double,string之类的数据,

StreamWriter/StreamReader和BinaryReader/BinaryWriter完全不同,StreamWriter/StreamReader操作的文件是文本文件,通常是txt文件,你可以用记事本来看得到你写入的数据,同样你用记事本生成的txt文件也能被StreamReader读取,

但BinaryReader/BinaryWriter操作的文件是二进制文件,不是文本文件,你可以用记事本打开BinaryWriter生成的文件,你会发现都是乱码,它并不是你想象的由0,1等字符组成的文件,呵呵,