C#将byte[]写入文件时输出为System.Byte[]如何存储实际字节内容
问题原因
将byte[]类型与字符串直接拼接时,会默认调用数组的ToString()方法,该方法仅返回类型名System.Byte[],不会输出实际的字节内容。
解决方案
根据你的存储需求选择对应实现方式:
1. 存储网页可读文本内容
如果请求的是网页这类文本类资源,直接将字节数组按对应编码转换为字符串即可,绝大多数网页使用UTF-8编码:
// 先在代码头部引用命名空间 using System.Text; // 修改写入行的代码即可 using (StreamWriter writer = new StreamWriter("saveData.txt",true)) { string content = Encoding.UTF8.GetString((byte[])url[1]); writer.WriteLine(url[0] + " " + content); }
2. 存储原始字节的十六进制文本形式
如果需要保留原始字节的信息用于后续还原,可以转成十六进制字符串存储:
using (StreamWriter writer = new StreamWriter("saveData.txt",true)) { // 输出为连续十六进制字符,如FF01AB格式 string hexStr = BitConverter.ToString((byte[])url[1]).Replace("-", ""); writer.WriteLine(url[0] + " " + hexStr); }
现有代码优化建议
你当前的displayByteCode方法未释放网络请求、流等非托管资源,存在内存泄漏风险,优化后的代码参考:
public byte[] displayByteCode(string getURLCode) { HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(getURLCode); myRequest.Method = "GET"; // 所有实现IDisposable接口的对象都用using块自动释放资源 using (WebResponse myResponse = myRequest.GetResponse()) using (Stream responseStream = myResponse.GetResponseStream()) using (MemoryStream ms = new MemoryStream()) { responseStream.CopyTo(ms); return ms.ToArray(); } }
内容的提问来源于stack exchange,提问作者newbieperson
相关产品推荐
相关产品推荐

