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

  1 using System;
  2 using System.IO;
  3 using System.Security.Cryptography;
  4 using System.Text;
  5
  6 namespace myMethod
  7 {
  8     class lgs
  9     {
 10         static void Main()
 11         {
 12             Console.ReadKey();
 13         }
 14
 15         /// <summary>
 16         /// 使用不同的编码格式将  字符串 → 字节数组
 17         /// </summary>
 18         /// <returns></returns>
 19         static void StringToByteArray(string param, out byte[] result)
 20         {
 21             //result = Encoding.ASCII.GetBytes(param);
 22             //result = Encoding.UTF32.GetBytes(param);
 23             result = Encoding.UTF7.GetBytes(param);
 24         }
 25
 26         /// <summary>
 27         /// 使用不同的编码格式将  字节数组 → 字符串
 28         /// </summary>
 29         /// <returns></returns>
 30         static void ByteArrayToString(byte[] param, out string result)
 31         {
 32             //result = Encoding.UTF7.GetString(param);
 33             //result = Encoding.Default.GetString(param);
 34             result = Encoding.ASCII.GetString(param);
 35         }
 36
 37         /// <summary>
 38         /// 字符串转换为流
 39         /// </summary>
 40         static void StringToStream(string param, out MemoryStream result)
 41         {
 42             byte[] tmpArray = Convert.FromBase64String(param);  //相当于将字符串转换为等效的字节数组
 43             result = new MemoryStream(tmpArray);
 44         }
 45
 46         /// <summary>
 47         /// 流转换了字符串
 48         /// </summary>
 49         static void StreamToString(MemoryStream param, out string result)
 50         {
 51             //方式一 :param.ToArray() 将流内容写入字节数组
 52             result = Encoding.Default.GetString(param.ToArray());
 53
 54             //方式二:
 55             result = Convert.ToBase64String(param.ToArray());
 56         }
 57
 58         /// <summary>
 59         /// 字节数组转换为流
 60         /// </summary>
 61         static void ByteArrayToStream(byte[] param, out MemoryStream result)
 62         {
 63             //方式一:
 64             //result = new MemoryStream(param);
 65
 66             //方式二:
 67             result = new MemoryStream();
 68             result.Read(param, 0, param.Length);
 69         }
 70
 71         /// <summary>
 72         /// 流转换为字节数组
 73         /// </summary>
 74         static void SteamToByteArray(MemoryStream param, out byte[] result)
 75         {
 76             //方式一:
 77             result = param.ToArray();
 78
 79             //方式二:
 80             //param.Write(result, 0, (int)param.Length);
 81         }
 82
 83         /// <summary>
 84         /// 计算文件的 MD5 值
 85         /// </summary>
 86         /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
 87         /// <returns>MD5 值16进制字符串</returns>
 88         static string MD5File(string fileName)
 89         {
 90             return HashFile(fileName, "md5");
 91         }
 92
 93         /// <summary>
 94         /// 计算文件的 sha1 值
 95         /// </summary>
 96         /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
 97         /// <returns>sha1 值16进制字符串</returns>
 98         static string SHA1File(string fileName)
 99         {
100             return HashFile(fileName, "sha1");
101         }
102
103         /// <summary>
104         /// 计算文件的哈希值
105         /// </summary>
106         /// <param name="fileName">要计算哈希值的文件名和路径</param>
107         /// <param name="algName">算法:sha1,md5</param>
108         /// <returns>哈希值16进制字符串</returns>
109         static string HashFile(string fileName, string algName)
110         {
111             if (!File.Exists(fileName))
112                 return string.Empty;
113
114             FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
115             byte[] hashBytes = HashData(fs, algName);
116             fs.Close();
117             return ByteArrayToHexString(hashBytes);
118         }
119
120         /// <summary>
121         /// 计算哈希值
122         /// </summary>
123         /// <param name="stream">要计算哈希值的 Stream</param>
124         /// <param name="algName">算法:sha1,md5</param>
125         /// <returns>哈希值字节数组</returns>
126         static byte[] HashData(Stream stream, string algName)
127         {
128             HashAlgorithm algorithm;
129             if (algName == null)
130             {
131                 throw new ArgumentNullException("algName 不能为 null");
132             }
133             if (string.Compare(algName, "sha1", true) == 0)
134             {
135                 algorithm = SHA1.Create();
136             }
137             else
138             {
139                 if (string.Compare(algName, "md5", true) != 0)
140                 {
141                     throw new Exception("algName 只能使用 sha1 或 md5");
142                 }
143                 algorithm = MD5.Create();
144             }
145             return algorithm.ComputeHash(stream);
146         }
147
148         /// <summary>
149         /// 字节数组转换为16进制表示的字符串
150         /// </summary>
151         static string ByteArrayToHexString(byte[] buf)
152         {
153             // ToString(buf) --- 由以连字符分隔的十六进制对构成的字符串,其中每一对表示 value 中对应的元素;例如“7F-2C-4A”。
154             return BitConverter.ToString(buf).Replace("-", "");
155         }
156     }
157 }

参考:https://www.oschina.net/code/snippet_2256220_53535

原文地址:https://www.cnblogs.com/luguoshuai/p/9969733.html

时间: 2024-07-31 04:30:27

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

Java文件与io——字节数组流数据流字符串流

字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效.此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException. ByteArrayOutputStream:此类中实现了一个输出流.其中的数据被写入一个byte数组.缓冲区会随着数据的不断写入而自动增长.可使用toByteArray()和toString()获取数据.关闭ByteArra

利用字节流和字节数组流是实现文件的复制

package ioxuexi; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;i

把字符串字节数组写入文件

/** * Java,把字符串字节数组写入文件 * @param byt * @throws Exception */ private static void byte2File(byte[] byt) throws Exception { if (null == byt) { return; } String targetFile = "C:\\Users\\fileTestTarget.txt"; File file = new File(targetFile); OutputSt

六、字节数组流ByteArrayInputStream&amp;ByteArrayOutputStream

一.前提 经常而言我们都是针对文件的操作,然后带上缓冲的节点流进行处理,但有时候为了提升效率,我们发现频繁的读写文件并不是太好,那么于是出现了字节数组流,即存放在内存中,因此有称之为内存流: 1.ByteArrayInputStream类 ByteArrayInputStream包含一个内部缓冲区,其中包含可以从流中读取的字节. 内部计数器跟踪由read方法提供的下一个字节. 关闭一个ByteArrayInputStream没有任何效果. 该流中的方法可以在流关闭后调用,而不生成IOExcept

java基础(IO流---字节流、字符流、字节数组流)

字节流: FileInputStream:通过字节的方式读取文件,适合读取所有类型的文件(图像.视频等),全字符请考虑FileReader FileOutputStream:通过字节的方式写出或追加数据到文件,适合所有类型的文件(图像.视频等),全字符请考虑FileWriter 字符流: FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 字节数组流: ByteArrayInputStream:字节数组输入

Java IO学习笔记(三)转换流、数据流、字节数组流

转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和BufferedWriter,并使用它们的readLine 和 newLine方法. 2.有两种转换流:InputStreamReader.OutputStreamWriter 练习小程序1: package test.io.transfer; import java.io.FileOutputSt

java _io_图片到内存(字节数组),字节数组到文件,练习文件流和字节数组流

//图片读取到字节数组中,字节数组写出到文件 public class test{ public static void main(String[]args) { String path="C:/Users/10853/eclipse-workspace/hell/linux学习路线.png"; byte[] data=toByteArray(path); //图片不能直接到字节数组中,is.read()返回的是int类型的大小,new String是解码 //需要写入字节数组(内存)

内存流(字节数组流)ByteArrayInputStream

package org.example.io; import java.io.ByteArrayInputStream;import java.io.IOException; /** * ByteArrayInputStream:在创建对象时传入数组即可,不需要传文件,也没有新增的方法,close()关闭无效 * 流本身就是内存中的资源,流中的内容也是内存中的资源,所以不用手动关闭,内存会给他释放,所以不用关闭流 * 流的内容是内存中的资源,不访问磁盘 */ public class TestB

C#--整型与字节数组byte[]之间的转换

转:https://www.cnblogs.com/dayang12525/p/6393941.html using System; int  i = 123;byte [] intBuff = BitConverter.GetBytes(i);     // 将 int 转换成字节数组lob.Write(intBuff, 0, 4);i = BitConverter.ToInt32(intBuff, 0);           // 从字节数组转换成 int double x = 123.45