字节数组与文件之间的相互转换的工具

Posted luguoshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节数组与文件之间的相互转换的工具相关的知识,希望对你有一定的参考价值。

工具代码:

 1 using System;
 2 using System.IO;
 3 
 4 /// <summary>
 5 /// 字节数组与文件之间的相互转换的接口
 6 /// </summary>
 7 public interface IConvertBetweenBytesAndFile
 8 {
 9     /// <summary>
10     /// 将字节数组写入文件
11     /// </summary>
12     /// <param name="filePath">目标文件</param>
13     /// <param name="bytes">待写入的字节数组</param>
14     void WriteBytesToFile(string filePath, byte[] bytes);
15     /// <summary>
16     /// 从文件读取字节数组
17     /// </summary>
18     /// <param name="filePath"></param>
19     /// <returns></returns>
20     byte[] ReadBytesFromFile(string filePath);
21 }
22 
23 /// <summary>
24 /// 方式一
25 /// </summary>
26 public class ConvertBetweenBytesAndFile_ToolA : IConvertBetweenBytesAndFile
27 {
28     public byte[] ReadBytesFromFile(string filePath)
29     {
30         if (string.IsNullOrEmpty(filePath))
31             return null;
32         return File.ReadAllBytes(filePath);
33     }
34 
35     public void WriteBytesToFile(string filePath, byte[] bytes)
36     {
37         if (string.IsNullOrEmpty(filePath))
38             return;
39         File.WriteAllBytes(filePath, bytes);
40     }
41 }
42 
43 /// <summary>
44 /// 方案二
45 /// </summary>
46 public class ConvertBetweenBytesAndFile_ToolB : IConvertBetweenBytesAndFile
47 {
48 
49     public void WriteBytesToFile(string filePath, byte[] bytes)
50     {
51         using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
52         {
53             fileStream.Write(bytes, 0, bytes.Length);
54         }
55     }
56 
57     public byte[] ReadBytesFromFile(string filePath)
58     {
59         using (FileStream fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read))
60         {
61             using (BinaryReader reader = new BinaryReader(fileStream))
62             {
63                 long length = fileStream.Length;
64                 byte[] bytes = new byte[length];
65                 reader.Read(bytes, 0, bytes.Length);
66                 return bytes;
67             }
68         }
69     }
70 }

定义可序列化的类:

 1 using System.IO;
 2 
 3 /// <summary>
 4 /// 定义序列化的对象
 5 /// </summary>
 6 public class People
 7 {
 8     public int age;
 9     public string name;
10 
11     public override string ToString()
12     {
13         return "Name = " + name + "; Age = " + age;
14     }
15 
16     /// <summary>
17     /// 编码
18     /// </summary>
19     /// <returns></returns>
20     public byte[] DoEncode()
21     {
22         using (MemoryStream ms = new MemoryStream())
23         {
24             using (BinaryWriter writer = new BinaryWriter(ms))
25             {
26                 writer.Write(age);
27                 writer.Write(name);
28             }
29             return ms.ToArray();
30         }
31     }
32 
33     /// <summary>
34     /// 解码
35     /// </summary>
36     /// <param name="bytes"></param>
37     public void DoDecode(byte[] bytes)
38     {
39         if (null == bytes)
40         {
41             return;
42         }
43 
44         using (MemoryStream ms = new MemoryStream(bytes))
45         {
46             using (BinaryReader reader = new BinaryReader(ms))
47             {
48                 age = reader.ReadInt32();
49                 name = reader.ReadString();
50             }
51         }
52     }
53 }

测试:

 1 using System;
 2 
 3 namespace myMethod
 4 {
 5     class lgs
 6     {
 7         static void Main()
 8         {
 9             string pathA = @"D:Test.txt";
10 
11             //工具对象
12             IConvertBetweenBytesAndFile toolA = new ConvertBetweenBytesAndFile_ToolA();
13 
14             byte[] bytes = null;
15 
16             //将对象写入文件
17             People people = new People();
18             people.age = 12;
19             people.name = "Tom";
20             bytes = people.DoEncode();
21             toolA.WriteBytesToFile(pathA, bytes);
22 
23             //从文件中解析对象
24             People p2 = new People();
25             bytes = toolA.ReadBytesFromFile(pathA);
26             p2.DoDecode(bytes);
27 
28             Console.WriteLine(p2.ToString());
29 
30             Console.ReadKey();
31         }
32     }
33 }

运行结果:

技术图片技术图片

以上是关于字节数组与文件之间的相互转换的工具的主要内容,如果未能解决你的问题,请参考以下文章

字符串字节数组流之间的相互转换以及文件MD5的计算

java 基本数据类型数组与集合之间相互转换

Image与byte[]数组的相互转换

一起Talk Android吧(第四百二十五回:字节数组与String相互转换)

关于图片与base64相互转换的工具类

在Java中,ArrayList与数组如何相互转换,写出例子