将byte []转换为字符串的最快方法?

时间:2014-04-23 08:58:22

标签: c# unity3d bytearray unityscript

我需要在C#和Unity中将byte []转换为字符串,而不会丢失太多的每秒帧数。我目前正在使用WWW类来获取文本文件,但是当我使用WWW.text时,因为文件太大而导致FPS下降。有没有办法逐步进行转换,没有太长的延迟。

WWW file = new WWW(path);
yield return file;
string text= file.text;

我用它来读取一个完整的文件(一个.OBJ),我需要阅读所有文本。行到行或所有文本到一个字符串后拆分。为了在没有FPS的情况下阅读文本,我做了这个。

WWW file = new WWW(path);
yield return file;
byte[] text= file.bytes;

如果文件太大,WWW.text,丢弃FPS,那么我需要使用WWW.bytes。在Unity中,useyield返回null;处理另一个框架。如果进程需要太多时间来执行,则丢弃FPS(万一为WWW.text);

Ex文件:http://people.sc.fsu.edu/~jburkardt/data/obj/cessna.obj

2 个答案:

答案 0 :(得分:1)

我猜WWW会在内部将请求结果存储为字节数组,并在访问text 字段时将其转换为字符串(这真的是一个字段吗?)。< / p>

因此,无论如何,将字节转换为字符串将需要分配内存并使用正确的编码来处理该字节数组。

最好的办法是直接从字节数组中提取数据,而不是先将其转换为大字符串。

修改

或者,您可以将字节数组包装在MemoryStream中,并使用适当的编码将其再次包装在StreamReader中(我猜想OBJ文件是纯ASCII)。

当您阅读文件时,您的文件将逐步转换。

在处理循环中使用yield模式,它应该是好的!

答案 1 :(得分:0)

尝试这种方式:

WWW file = new WWW(path);
while(!file.isDone)
{
    yield return new WaitForSeconds(0.1f);
}
string text = file.text;