我正在打开一个.gz文件并通过chunk读取它来解压缩它。
未压缩文件中的数据如下: aRSbRScRSd,每条记录之间都有记录分隔符(ASCII码30)(我的虚拟示例a,b,c中的记录)。
File file = File(mylog.gz, "r");
auto uc = new UnCompress();
foreach (ubyte[] curChunk; file.byChunk(4096*1024))
{
auto uncompressed = cast(string)uc.uncompress(curChunk);
writeln(uncompressed);
auto stringRange = uncompressed.splitLines();
foreach (string line; stringRange)
{
***************** Do something with line
上面代码的结果是: abcd遗憾的是记录分隔符(ASCII 30)丢失了。
通过检查数据记录,我意识到在将ubyte []转换为字符串后,分隔符丢失了。
现在我有两个问题:
我应该在代码中更改什么来保留记录分隔符?
如何在没有for循环的情况下编写上面的代码?我想逐行阅读。
修改
第一个问题的更通用且易于理解的代码:
ubyte[] temp = [ 65, 30, 66, 30, 67];
writeln(temp);
string tempStr = cast(string) temp;
writeln (tempStr);
结果是:不需要的ABC。
答案 0 :(得分:2)
尽管某些编辑可能会在其位置显示符号,但字符30不是可打印字符。它不会丢失,但它不会打印出来。
另请注意,将ubyte[]
转换为string
通常是不正确的,因为ubyte[]
数组是可变的而string
是不可变的。最好将ubyte[]
投射到char[]
。