当在运行时设置缓冲区长度时,如何使用read(ubyte [] buffer)读取BufferedFile?

b0r*_*dom 6 d

我有一个二进制文件,它实际上是一堆文件,格式为:

lengh_of_subfile,subfile
Run Code Online (Sandbox Code Playgroud)

length_of_subfile是一个64位整数.我可以读取long没问题,但是当我尝试为子文件创建缓冲区时,我得到编译错误,说它在编译时无法读取.我错过了什么?我在erlang,PHP和C#中写了一个相同的提取工具...... D让我循环.

void main(string args[]) {
    Stream file = new BufferedFile(args[1], FileMode.In);
    int counter = 0;
    while(file.position < file.size) {
        ulong len;
        file.read(len);
        ubyte[len] ogg;
        file.read(ogg);
        string outname = getcwd() ~ "/" ~ to!string(counter) ~ ".ogg";
        Stream oggout = new BufferedFile(outname, FileMode.OutNew);
        oggout.write(ogg);
        writefln("Creating file " ~ to!string(counter) ~ ".ogg");
        counter++;
    }   
}
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 7

代替

        ubyte[len] ogg;
Run Code Online (Sandbox Code Playgroud)

        ubyte[] ogg = new ubyte[len];
Run Code Online (Sandbox Code Playgroud)