我在字节数组中有一些数据,这些数据是必须写入文件的字符。该文件是另一个工具的输入,因此格式必须符合规定。
应该出现在文件中的格式如下所示 2 1 1 1 1 1 1 1 1 1 T 0 3 1 12 1 1 1 F. 14 12 T
我使用以下代码将字节数组写入文件。代码中的covData是一个字节数组。
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write))
{
using (BinaryWriter bw = new BinaryWriter(fs, Encoding.UTF8))
{
foreach (byte b in covData)
{
Console.Write((char)b);
bw.Write(b);
}
}
}
如果我现在用Hex编辑器打开文件,那么在我写入的字节中的数据前面会有额外的空值。
EG。 00 00 32 20 00 00 31 20 00 00 31 20 00 00 31 20
为什么当第一个字节包含2时出现前两个空值(00 00),它出现在数据的第三位(32)?下一个数据是旁边正确显示的空格(20),但之后还有另一对空值。有没有办法阻止将空值写入文件?
答案 0 :(得分:0)
这看起来很复杂。你为什么不这么做:
File.WriteAllBytes(filename, covData);
答案 1 :(得分:0)
你应该将它全部读入字节数组,然后我建议使用MemoryStream
对其进行解压缩。
byte[] compressedBytes = File.ReadAllBytes(filename);
using (var mstrm = new MemoryStream(compressedBytes))
{
using(var inStream = new GzipStream(mstrm, CompressionMode.Decompress))
{
using (var outStream = File.Create("outputfilename"))
{
var buffer = new byte[BufferSize];
int bytesRead;
while ((bytesRead = inStream.Read(buffer, 0, BufferSize)) != 0)
{
outStream.Write(buffer, 0, bytesRead);
}
}
}
}
答案 2 :(得分:0)
我不确定我究竟究竟为什么发生这个问题只是过滤缓冲区数组,就像下面删除了额外的空值一样。
if (b != default(Byte))
{
Console.WriteLine((byte)b);
bw.Write(b);
}