using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace myMethod
{
class lgs
{
static void Main()
{
Console.ReadKey();
} /// <summary>
/// 使用不同的编码格式将 字符串 → 字节数组
/// </summary>
/// <returns></returns>
static void StringToByteArray(string param, out byte[] result)
{
//result = Encoding.ASCII.GetBytes(param);
//result = Encoding.UTF32.GetBytes(param);
result = Encoding.UTF7.GetBytes(param);
} /// <summary>
/// 使用不同的编码格式将 字节数组 → 字符串
/// </summary>
/// <returns></returns>
static void ByteArrayToString(byte[] param, out string result)
{
//result = Encoding.UTF7.GetString(param);
//result = Encoding.Default.GetString(param);
result = Encoding.ASCII.GetString(param);
} /// <summary>
/// 字符串转换为流
/// </summary>
static void StringToStream(string param, out MemoryStream result)
{
byte[] tmpArray = Convert.FromBase64String(param); //相当于将字符串转换为等效的字节数组
result = new MemoryStream(tmpArray);
} /// <summary>
/// 流转换了字符串
/// </summary>
static void StreamToString(MemoryStream param, out string result)
{
//方式一 :param.ToArray() 将流内容写入字节数组
result = Encoding.Default.GetString(param.ToArray()); //方式二:
result = Convert.ToBase64String(param.ToArray());
} /// <summary>
/// 字节数组转换为流
/// </summary>
static void ByteArrayToStream(byte[] param, out MemoryStream result)
{
//方式一:
//result = new MemoryStream(param); //方式二:
result = new MemoryStream();
result.Read(param, , param.Length);
} /// <summary>
/// 流转换为字节数组
/// </summary>
static void SteamToByteArray(MemoryStream param, out byte[] result)
{
//方式一:
result = param.ToArray(); //方式二:
//param.Write(result, 0, (int)param.Length);
} /// <summary>
/// 计算文件的 MD5 值
/// </summary>
/// <param name="fileName">要计算 MD5 值的文件名和路径</param>
/// <returns>MD5 值16进制字符串</returns>
static string MD5File(string fileName)
{
return HashFile(fileName, "md5");
} /// <summary>
/// 计算文件的 sha1 值
/// </summary>
/// <param name="fileName">要计算 sha1 值的文件名和路径</param>
/// <returns>sha1 值16进制字符串</returns>
static string SHA1File(string fileName)
{
return HashFile(fileName, "sha1");
} /// <summary>
/// 计算文件的哈希值
/// </summary>
/// <param name="fileName">要计算哈希值的文件名和路径</param>
/// <param name="algName">算法:sha1,md5</param>
/// <returns>哈希值16进制字符串</returns>
static string HashFile(string fileName, string algName)
{
if (!File.Exists(fileName))
return string.Empty; FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
byte[] hashBytes = HashData(fs, algName);
fs.Close();
return ByteArrayToHexString(hashBytes);
} /// <summary>
/// 计算哈希值
/// </summary>
/// <param name="stream">要计算哈希值的 Stream</param>
/// <param name="algName">算法:sha1,md5</param>
/// <returns>哈希值字节数组</returns>
static byte[] HashData(Stream stream, string algName)
{
HashAlgorithm algorithm;
if (algName == null)
{
throw new ArgumentNullException("algName 不能为 null");
}
if (string.Compare(algName, "sha1", true) == )
{
algorithm = SHA1.Create();
}
else
{
if (string.Compare(algName, "md5", true) != )
{
throw new Exception("algName 只能使用 sha1 或 md5");
}
algorithm = MD5.Create();
}
return algorithm.ComputeHash(stream);
} /// <summary>
/// 字节数组转换为16进制表示的字符串
/// </summary>
static string ByteArrayToHexString(byte[] buf)
{
// ToString(buf) --- 由以连字符分隔的十六进制对构成的字符串,其中每一对表示 value 中对应的元素;例如“7F-2C-4A”。
return BitConverter.ToString(buf).Replace("-", "");
}
}
}

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

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

  1. [Swift]JSON字符串与字典(Dictionary)、数组(Array)之间的相互转换

    1.JSON字符串与字典(Dictionary)之间的相互转换 import Foundation //JSON字符串转换为字典(Dictionary) func getDictionaryFromJ ...

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

    字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效. ...

  3. Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)

    一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...

  4. JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流

    上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream  FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...

  5. IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)

    一:序列化的问题 1.序列号的使用问题 关于在序列化中的序列号的使用问题,一般要是使用. 因为,每次要序列化的类产生都会产生一个一个新的序列号,如果将这个类的程序修改后,就会产生新的序列号,以前序列化 ...

  6. 6.5(java学习笔记)其他流(字节数组流,数据流,对象流,打印流)

    一.字节数组流 之前使用输入输出流的操作的对象是文件,而这里字节数组流操作的对象是内存,内存可以看做是一个字节数组. 使用字节数组流读写就可以看做是从内存A到内存B的读写,对象时内存即字节数组. 1. ...

  7. Java基础IO类之字节数组流

    package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...

  8. Java字节数组流学习

    字节数组流 基于内存操作,内部维护着一个字节数组,我们可以利用流的读取机制来处理字符串.无需关闭,不会报IOException. ByteArrayInputStream 包含一个内部缓冲区,该缓冲区 ...

  9. Java IO 流-- 字节数组流ByteArrayInPutStream ByteArrayOutPutStream

    字节数组流输于缓冲流,放在jvm内存中,java可以直接操作.我们使用时可以不用关闭,交给GC垃圾回收机制处理. 当然我们为了保持良好习惯和代码一致性也可以加上关闭语句. 当其实我么打开ByteArr ...

随机推荐

  1. oracle 11g中的自动维护任务管理

    因为人员紧缺,最近又忙着去搞性能优化的事情,有时候真的是不想再搞这个事情,只是没办法,我当前的绩效几乎取决于这个项目的最终成绩,所以不管是人的事还是事的事,都得去让他顺利推进. 前段时间发生还有几台服 ...

  2. NLTK 知识整理

    NLTK 知识整理 nltk.corpus模块自带语料 NLTK comes with many corpora, toy grammars, trained models, etc. A compl ...

  3. Examples of Scikit-learn Usages

    Examples of Scikit-learn Usages KFold K-折交叉验证 >>> import numpy as np >>> from skle ...

  4. Python3基础 dict pop 弹出指定键的项

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. upc组队赛1 过分的谜题【找规律】

    过分的谜题 题目描述 2060年是云南中医学院的百年校庆,于是学生会的同学们搞了一个连续猜谜活动:共有10个谜题,现在告诉所有人第一个谜题,每个谜题的答案就是下一个谜题的线索....成功破解最后一个谜 ...

  6. linux基础之vim编辑器

    vi : Visual Interface vim : VI Improved : VI的基础加上一些有用的插件 vim编辑器: 文本编辑器, 字处理器, 全屏编辑器, 模式化编辑器 vim的模式有三 ...

  7. Linux网络参数和ifconfig

    目录 1.ifconfig 网络参数 2.ifup和ifdown 3.CentOS7网络配置相关文件 4.CentOS7默认网卡接口配置文件 5.补充命令 6.总结: 参考: 1.ifconfig 网 ...

  8. Git 命令收集

    目录 1.清理恢复 2.回滚,reset与revert的区别 3.merge,rebase,cherry-pick区别 4.删除不存在对应远程分支的本地分支 5.git pull,git push 报 ...

  9. 【做题】agc003E - Sequential operations on Sequence——经典结论

    题意:有一个序列,初始是从\(1\)到\(n\)的\(n\)个数.有\(q\)次操作,每次操作给出\(q_i\),把当前的序列重复无数遍,然后截取最前面的\(q_i\)个元素作为新序列.要求输出完成所 ...

  10. 【做题】arc068_e-Snuke Line——利用特殊性质分讨

    显然,对于所有跨度暴力扫一遍的复杂度本身只有\(O(n \log n)\). 容易想到在每一个到达的位置加上覆盖这个位置的区间数.剩下的问题就在于如何处理覆盖了多个位置的区间. 记录已访问或去重都是难 ...