2012-01-11 22 views
1

我的意图是写一个byte[]到一个文件。代码段低于:这个代码的为什么这样的文件内容差异C#

byte[] stream = { 10, 20, 30, 40, 60 }; 

for (int i = 0; i < 2; i++) 
{ 
    FileStream aCmdFileStream = new FileStream(@"c:\binarydata.txt", FileMode.Append, FileAccess.Write, FileShare.None); 
    StreamWriter aStreamWriter = new StreamWriter(aCmdFileStream); 

    for (int ii = 0; ii < stream.Length; ii++) 
    { 
     aStreamWriter.Write(stream[ii]); 
     aStreamWriter.WriteLine(); 
     aStreamWriter.BaseStream.Write(stream,0,stream.Length); 
    } 

    aStreamWriter.Close(); 
} 

输出代码段

(< 
(< 
(< 
(< 
(<10 
20 
30 
40 
60 

(< 
(< 
(< 
(< 
(<10 
20 
30 
40 
60 

StreamWriter.Write()时使用它转储被存储在数组中的值。但是StreamWriter.BaseStream.Write(byte[],int offset, int length),这些值完全不同。这是什么原因?

+0

我建议你不要使用与文本一起工作的类(如'StreamWriter')来处理二进制数据。 – svick 2012-01-11 11:49:05

回答

4

这是因为StreamWriterTextWriter并将字节转换为文本(字符串表示形式)。

并且使用BaseStream.Write(byte[] data, ...)直接写入字节而不进行任何转换。

但是你正在使用2种方法交错,我猜一些覆盖也发生了。请注意,您应该使用其中一种,而不是两种。

+0

另外值得一提的是'StreamWriter'正在缓冲(不期望任何人直接访问'BaseStream'),这就是为什么数字出现在其他文本之后。 – 2012-01-11 11:42:19

+0

只是想知道为什么会产生这样的特殊字符,字节意味着从0到255的值。 – Raghav55 2012-01-11 11:44:39

+0

重新设置'特殊字符' - 您看到的取决于使用的查看器和使用/推导的编码。 – 2012-01-11 12:25:01