【发布时间】:2018-07-07 06:04:55
【问题描述】:
在互联网上搜索可以让我从 Java 容器中提取声音文件的工具时,我发现了一段 4 年多前的 D 代码。不幸的是,我无法编译它,并在谷歌搜索时发现 std.stream 已被弃用。然而,我以前从未与 D 合作过,而且我找不到任何关于如何使这个 pre-stream-death 代码加快速度的明确想法。目前有没有 D 程序员可以帮助我?
编辑:我已经获取了 undead src 文件流和相关文件,但我现在遇到了 int 属性问题。根据我找到此代码的论坛,它在 4 年前发布时有效,所以我无法想象“files.sort”本质上是有问题的。
import std.stdio;
import std.file;
import std.conv;
import std.stream;
import std.bitmanip;
void main(string args[]){
Stream pkfile = new BufferedFile(args[1],FileMode.In);
int headersize;
int counter = 0;
int filecount;
int throwaway;
int offset;
pkfile.read(headersize);
pkfile.read(filecount);
writefln("Count is : " ~ to!string(filecount));
int[] files = new int[filecount];
for(int x = 0; x < filecount; x++)
{
pkfile.read(throwaway);
pkfile.read(offset);
files[x] = offset + (headersize + 4);
}
files = files.sort;
for(int x =0; x < filecount; x++)
{
pkfile.seekSet(cast(long)files[x]);
long len;
pkfile.read(len);
int newlen = cast(int)len;
ubyte[] ogg = new ubyte[newlen];
pkfile.read(ogg);
string outname = getcwd() ~"/"~ to!string(counter) ~ ".ogg";
Stream oggout = new BufferedFile(outname,FileMode.OutNew);
oggout.write(shiftL(ogg,newlen));
oggout.close();
writefln("Creating file " ~ to!string(counter) ~".ogg");
counter++;
}
}
ubyte[] shiftL(ubyte[] ogg,int ogglength){
ubyte[] temp = new ubyte[ogglength];
for(int x = 0;x < ogglength;x++){
temp[x] = cast(byte)(ogg[x]-1);
}
return temp;
}
【问题讨论】:
-
可以使用std.algorithm的排序(
files.sort();)。 -
我要为此导入 std.algorithm.sorting 吗?当我这样做并进行从 sort 到 sort() 的建议更改时,我收到错误“无法将 SortedRange!(int[], "a