在C#中读取写入字节流与读取写入二进制数据, 有何差异?

在C#中,读取和写入字节流与读取和写入二进制数据有些许不同,尽管它们在某些情况下可能会重叠使用。以下是它们之间的主要区别:

  1. 读取和写入字节流:

    • 读取和写入字节流通常指的是处理文件或流中的原始字节数据。在C#中,可以使用 FileStream 类来读取和写入字节流。
    • 读取字节流意味着按字节顺序从文件或流中读取数据,而写入字节流意味着将字节数据按顺序写入文件或流。
    • 这种方法通常用于处理文件的原始字节数据,而不关心其编码或数据类型。
      using System;
      using System.IO;
      
      class Program
      {
          static void Main()
          {
              // 读取字节流
              using (FileStream fs = new FileStream("input.txt", FileMode.Open))
              {
                  byte[] buffer = new byte[fs.Length];
                  int bytesRead = fs.Read(buffer, 0, buffer.Length);
                  Console.WriteLine($"Read {bytesRead} bytes from input.txt.");
              }
      
              // 写入字节流
              byte[] dataToWrite = { 65, 66, 67, 68, 69 }; // ASCII码:A, B, C, D, E
              using (FileStream fs = new FileStream("output.txt", FileMode.Create))
              {
                  fs.Write(dataToWrite, 0, dataToWrite.Length);
                  Console.WriteLine("Wrote data to output.txt.");
              }
          }
      }
      
  2. 读取和写入二进制数据:

    • 读取和写入二进制数据通常指的是按特定格式解析和处理数据,例如按照特定的数据结构来读取或写入数据。
    • 在C#中,可以使用 BinaryReader 和 BinaryWriter 类来读取和写入二进制数据。这些类提供了用于读取和写入基本数据类型(如整数、浮点数、字符串等)的方法。
    • 读取和写入二进制数据可以包含一些解析和转换过程,以便正确地处理数据格式。
      using System;
      using System.IO;
      
      class Program
      {
          static void Main()
          {
              // 读取二进制数据
              using (BinaryReader reader = new BinaryReader(File.Open("input.bin", FileMode.Open)))
              {
                  int intValue = reader.ReadInt32();
                  float floatValue = reader.ReadSingle();
                  string stringValue = reader.ReadString();
      
                  Console.WriteLine($"Int value: {intValue}");
                  Console.WriteLine($"Float value: {floatValue}");
                  Console.WriteLine($"String value: {stringValue}");
              }
      
              // 写入二进制数据
              using (BinaryWriter writer = new BinaryWriter(File.Open("output.bin", FileMode.Create)))
              {
                  int intValue = 123;
                  float floatValue = 3.14f;
                  string stringValue = "Hello, world!";
      
                  writer.Write(intValue);
                  writer.Write(floatValue);
                  writer.Write(stringValue);
      
                  Console.WriteLine("Wrote binary data to output.bin.");
              }
          }
      }
      

总的来说,读取和写入字节流更加原始和低级,通常用于处理文件的原始字节数据,而读取和写入二进制数据更关注于按特定格式解析和处理数据。选择使用哪种方法取决于处理的数据类型和需求。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#读取超大字节的文件有多种方法,以下是其的两种常见方法: 1. 使用FileStream类:使用FileStream类可以打开大文件并读取数据。FileStream类是基于文件的流,它支持读取写入二进制数据。您可以使用FileStream类的Read方法按字节读取文件的一部分,然后将其转换为所需的格式。对于大文件,建议使用缓冲区读取数据,而不是一次读取整个文件。 以下是一个使用FileStream类读取大文件的示例代码: ``` using System.IO; public static void ReadLargeFile(string filePath) { using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { byte[] buffer = new byte[1024 * 1024]; // 1MB buffer int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0) { // process the buffer here } } } ``` 2. 使用MemoryMappedFile类:使用MemoryMappedFile类可以将整个文件映射到内存,并在需要时按需读取数据。这种方法可以提高性能,特别是对于需要多次读取文件的应用程序。MemoryMappedFile类在内存创建一个“映射”,它将文件的内容读取到内存,并允许您按需读取数据。您可以使用MemoryMappedFile类的CreateFromFile方法将文件映射到内存,然后使用MemoryMappedViewAccessor类按字节读取数据。 以下是一个使用MemoryMappedFile类读取大文件的示例代码: ``` using System.IO.MemoryMappedFiles; public static void ReadLargeFile(string filePath) { using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filePath)) { using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor()) { long fileSize = new FileInfo(filePath).Length; byte[] buffer = new byte[fileSize]; accessor.ReadArray(0, buffer, 0, buffer.Length); // process the buffer here } } } ``` 这些方法都可以处理大文件,但是它们的性能和内存使用情况可能有所不同,具体取决于您的应用程序需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值