c#二进制流的读和写(BinaryReader,BinaryWriter)

本文介绍了C#中使用BinaryReader和BinaryWriter进行二进制流读写时的注意事项。内容包括:1. BinaryWriter写入字符串时会在文件开头额外写入字符数;2.避免将二进制数据转换为字符串再写入,以免产生错误;3.展示了网络二进制流读取和写入的代码示例,涉及异步回调函数及Buffer的使用。
摘要由CSDN通过智能技术生成

1.用BinaryWriter写string 的时候会在文件开头多出一个字符数。

2.若要从二进制流中写二进制,务必别转换成string写byte,这样会产生一些符号出错。

3.网络二进制流读与写代码:

        void Callback(IAsyncResult asyncResult)
        {

            FileInfo f = new FileInfo(@"D:\test2.mf");
         
            using (BinaryWriter bWriter = new BinaryWriter(f.OpenWrite()))
            {
                WebRequest request = asyncResult.AsyncState as WebRequest;
                WebResponse response = request.EndGetResponse(asyncResult);
                Stream responseStream = response.GetResponseStream();
                BinaryReader bReader = new BinaryReader(responseStream);
       byte[] buffer = oReader.ReadBytes(10000000);
                bw.Write(buffer);

            }

}

C#中,处理二进制序列通常涉及到System.IO.BinaryWriter和System.IO.BinaryReader类。如果你想向已经存在的二进制中增加新的字段,你需要重新考虑的结构,因为二进制文件不像文本文件那样容易编辑。不过,你可以采取以下步骤来实现: 1. 取原始的二进制到内存中。 2. 根据需要添加的字段,更新内存中的数据结构。 3. 将更新后的数据重新入到新的二进制中,或者追加到原文件的末尾。 这里有一个简单的例子,展示了如何向二进制中添加一个int字段: ```csharp using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; public class Example { public static void AddFieldToBinaryStream(string filePath, int additionalField) { // 将原始二进制取到内存中 BinaryReader originalReader = new BinaryReader(File.OpenRead(filePath)); MemoryStream memoryStream = new MemoryStream(); BinaryWriter newWriter = new BinaryWriter(memoryStream); // 取数据到新的内存中,这里假设有一个整数和一个字符串 int originalInt = originalReader.ReadInt32(); string originalString = originalReader.ReadString(); // 入原始数据到新的内存中 newWriter.Write(originalInt); newWriter.Write(originalString); // 在这里添加新的字段到中 newWriter.Write(additionalField); // 关闭所有资源 originalReader.Close(); newWriter.Close(); // 将新的二进制回到文件中 memoryStream.Seek(0, SeekOrigin.Begin); BinaryWriter writer = new BinaryWriter(File.OpenWrite(filePath)); memoryStream.CopyTo(writer.BaseStream); writer.Close(); memoryStream.Close(); } } // 调用方法示例 // Example.AddFieldToBinaryStream("path_to_file", 123); ``` 注意,这种方法仅适用于追加数据到文件末尾的情况,且不会破坏原有数据的取逻辑。如果需要修改现有数据结构,通常需要更多的处理,比如重构整个序列化逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值