这真让我困惑,比方说我想将一个整数保存到一个文件中,int x = 56,二进制文件在内存00000000 00000000 00000000 00111000中采用ascii等效的56表示,这将是:null null null 8并写入到文件?我对么?有人可以解释这两个功能,以及我何时应该使用它们?即时通讯使用c#btw.提前谢谢!
R. *_*des 20
从StreamWriter和BinaryWriter的MSDN页面,您可以清楚地看到差异:
StreamWriter的:
实现TextWriter,以便以特定编码将字符写入流中.
和:
的BinaryWriter:
将二进制中的原始类型写入流并支持以特定编码写入字符串.
第一个写东西作为文本,第二个写二进制,小端,所以int x = 56将写00111000 00000000 00000000 00000000.
Ken*_*art 15
二进制写入器写入整数的内存中二进制表示.流编写器写入ASCII表示.一般来说,前者可以更紧凑和高效(考虑写整数23861398 - 二进制写入器需要4个字节,但流编写器需要8,16甚至32,具体取决于编码)但后者导致普通旧文本.
从我能辨别的内容... StreamWriter更多用于文本,BinaryWriter用于原始类型,包括特定编码的字符串.说BinaryWriter用二进制写的东西虽然对于那些以表面看待事物的人来说是一种误导......正如我所做的那样.我假设当我向底层流写一个整数时,它实际上会用二进制写它,我可以再次读取它作为1和0的流.在代码中看起来很糟糕:
MemoryStream stream = new MemoryStream();
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(35);
// is equivalent to doing:
stream.Write(BitConverter.GetBytes((int)35), 0, 4);
Run Code Online (Sandbox Code Playgroud)
虽然BinaryWriter使用位移来提取字节而BitConverter使用不安全的指针转换,但结果是相同的.int的长度为32位或4个字节,它只是将表示该int的字节写入其底层流.
StreamWriter只对文本执行相同的操作,因此整数不会转换为字节,而是转换为字符...这类似于编写:
byte[] buffer = Encoding.UTF8.GetBytes("my string here 1234");
stream.Write(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)
这就是为什么我说用二进制写它是误导的...因为它确实......技术上.将每个写入的字节分解为位,然后获得二进制值.但是,将原始类型写为字节数组会更有意义.如果您要将流转换为字符串,则不会得到1和0的字符串.
| 归档时间: |
|
| 查看次数: |
20563 次 |
| 最近记录: |