簡體   English   中英

寫入文件時輸出不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM