[英]different output when writing a file
我正在創建一個二進制文件,為此
namespace BinaryStream
{
class Program
{
static void Main(string[] args)
{
string filename = @"c:\happybirthday.txt";
using (BinaryWriter binWriter =
new BinaryWriter(File.Open(filename, FileMode.Create)))
{
string name = "Sachin";
string wishes = "happy birthday";
binWriter.Write(name.ToCharArray());
binWriter.Write(wishes.ToCharArray());
}
}
}
}
如果使用binWriter.Writer(name),則文件包含一些特殊字符。 但是,如果我將字符串轉換為chararray並寫入file,則文件包含普通文本(不包含任何特殊字符)。
這背后的原因是什么?
Write(string)
重載的長度為前綴:
從這里: http : //msdn.microsoft.com/en-us/library/yzxa6408.aspx
長度前綴字符串表示字符串的長度,方法是在字符串前面加上包含該字符串長度的單個字節或單詞。 此方法首先將字符串的長度寫為UTF-7編碼的無符號整數,然后使用BinaryWriter實例的當前編碼將那么多字符寫入流中。
而Write(char[])
不是。 當打開文本查看時,這些額外的信息將顯示為怪異的數據。
當查看閱讀行為時,其原因顯而易見。 需要告訴BinaryReader.ReadChars
要讀取多少個字符,而BinaryReader.ReadString
通過查看長度前綴來解決。
編輯:可能重復,反正額外信息: 用System.IO.BinaryWriter寫字符串與char數組的區別
BinaryWriter.Write(string)首先寫入長度,然后在文件中寫入字符串。 因此,您在文件中找到了指向該字符串長度的特殊字符。
此功能的MSDN說明:
長度前綴字符串表示字符串的長度,方法是在字符串前面加上包含該字符串長度的單個字節或單詞。 此方法首先將字符串的長度寫為UTF-7編碼的無符號整數,然后使用BinaryWriter實例的當前編碼將那么多字符寫入流中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.