我想解析所有由http请求下载的字节如果它们大于100kb,如果它们不是,将它们连接到一个缓冲区并且当缓冲区获得大于100kb时再次解析它们,并且空过滤器。但不要解析所有的文件数据,并在最后的块获取前:2kb。它必须检查下一个块,如果它是最后的concat它(例如:final_chunk.Length + 2kb)有人可以用简单的算法帮我吗?
重点是,我需要每次至少解析100kb块,没有什么。
我想解析所有由http请求下载的字节如果它们大于100kb,如果它们不是,将它们连接到一个缓冲区并且当缓冲区获得大于100kb时再次解析它们,并且空过滤器。但不要解析所有的文件数据,并在最后的块获取前:2kb。它必须检查下一个块,如果它是最后的concat它(例如:final_chunk.Length + 2kb)有人可以用简单的算法帮我吗?
重点是,我需要每次至少解析100kb块,没有什么。
由于PoweRoy说你已经得到算法,你只需要它的代码...让我一步一步来。
我想这会做的伎俩。我只需要用字节数组重写它。你有没有发现错误?
class SmartChunk {
private int ChunkSize;
private int DataSize;
private int pos;
private int len;
private string buff = "";
public SmartChunk(int InitChunkSize, int DataLen) {
pos = 0;
len = DataLen;
ChunkSize = InitChunkSize;
}
public string Append(string s) {
if (pos + ChunkSize * 2 > len) ChunkSize = len - pos;
if (s.Length >= ChunkSize) {
return s;
}
else {
buff += s;
if (buff.Length >= ChunkSize) {
pos += buff.Length;
string b = buff;
buff = "";
return b;
}
}
return null;
}
}
这里,它是使用字节数组列表:
class SmartChunk {
private int ChunkSize;
private int DataSize;
private int pos;
private int len;
private List<byte[]> buff;
public SmartChunk(int InitChunkSize, int DataLen) {
buff = new List<byte[]>();
pos = 0;
len = DataLen;
ChunkSize = InitChunkSize;
}
public List<byte[]> Append(byte[] b) {
if (pos + ChunkSize * 2 > len) ChunkSize = len - pos;
if (b.Length >= ChunkSize) {
List<byte[]> priv = new List<byte[]>();
priv.Add(b);
return priv;
}
else {
buff.Add(b);
int total_size = 0;
foreach(byte[] inner in buff){
total_size += inner.Length;
}
if (total_size >= ChunkSize) {
pos += total_size;
List<byte[]> temp = new List<byte[]>(buff);
//foreach (byte[] tmp in buff) temp.Add(tmp);
buff.Clear();
return temp;
}
}
return null;
}
}
我觉得你的算法(后本身)现在你需要我在等待404响应为代码 – RvdK 2010-04-07 14:29:12
小于100kb。 – 2010-04-07 14:37:24