如何快速将 byte[] 转换为字符串?

4

我需要在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;
string text= file.bytes;

如果文件太大,使用WWW.text会导致帧率下降,则需要使用WWW.bytes。在Unity中使用yield return null;来处理另一帧。如果处理需要太长时间执行(在使用WWW.text的情况下),则会降低帧率。

1
投票重新开放,因为问题似乎是关于将字节数组的一部分作为字符串消耗而不是“如何将整个数组转换为字符串”... user3541917 - 你能否澄清问题并展示你如何使用结果字符串。如果你需要将内容作为单个字符串,那么它确实是重复的问题,但如果你想要消耗字符串的部分,那么它就是一个不同的问题。那么应该重新措辞/提问,以展示你希望如何逐步消耗“转换的结果”。 - Alexei Levenkov
我同意Alexei的观点。这不是一个简单的转换问题,而是一个管理fps和在不影响应用程序的情况下进行转换的技术问题。 - C4 - Travis
1个回答

2

我从未使用过Unity,但可以尝试这样做:String str = System.Text.Encoding.Default.GetString(result);


4
这不是将一个 byte[] 转换为有意义的 string 的方法。 - Marc Gravell
Encoding类可以完成这个任务。我想补充一下,一个字符串可以有不同的编码方式,所以您可以使用Unicode、UTF-8等编码方式。除此之外,这是一个很好的开始。 - oleksii
这会一次性转换所有的byte[],导致FPS下降。 我使用WWW.bytes因为它更快,不会导致FPS下降。 需要分批递增地将其转换为字符串。 WWW file = new WWW(path); yield return file; string text= file.text; - user3541917

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接