我有一个文件,其中包含数据,我想将其读作byte []并分成3个块。第一行可能被读作字符串,然后是第二个块,可能是1-3行的长度,所有左边的字节都是块3。
我想知道,我怎么能得到那个块1,而块2将是一个由byte []组成的字符串,块3将保留为byte []。
文件:
00256000 12 // block 1 single line
a2#b2#c2#d2#e2# //
1# // block 2 readline doesn't fit, unknown length of lines
1# //
—q3л // block 3 left bytes
我试图做FileStream.Read(bytes,0,file.length),但它只读取所有字节。
StreamReader.ReadLine()仅适用于第一行,但它读取普通字符串,而不是字节,它会跳过'\ n','\ r'等。
我不知道哪种方式更好地读取文件,读取所有字节并以某种方式将它们分成这3个块是完美的,以获得精确的块大小。
答案 0 :(得分:1)
您可以读取所有字节并迭代缓冲区搜索行结尾。当你找到行结尾转换textparts
string text = Encoding.UTF8.GetString(buffer, start_len, end_len);
P.S。一定要使用精确编码...... UTF8就是一个例子......
答案 1 :(得分:0)
创建一个包含所需数据成员的类,将其标记为serializable,然后序列化数据(即将其保存到文件中),并在需要数据时对其进行反序列化。
[Serializable()]
public class Data1
{
public Data1()
{
}
public String[] Block { get; set; }
}
要在保存数据后加载该数据,请使用以下技术:
public Data1 Load(string filename)
{
if (System.IO.File.Exists(filename))
{
using (var stream = System.IO.File.OpenRead(filename))
{
var deserializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
return deserializer.Deserialize(stream) as Data1;
}
}
return null;
}
但是,我不会为你做到这一切!您需要了解如何序列化 Data1 的实例。
答案 2 :(得分:0)
读取小文件有非常方便的方法,它返回行数组。
string[] lines = File.ReadAllLines("filename");