Я проверил несколько методов преобразования текстовых файлов в двоичные и нашел здесь несколько ответов. Тем не менее, большинство из них смутило меня из-за совместимости Unity .NET, а также смущает структура преобразования текста в двоичный файл.
У меня есть текстовый файл (экспортированное облако точек), в котором хранятся положения точек в трехмерном пространстве и информация о цвете, например:
X Y Z colorvalues
-0.680891 -90.6809 0 204 204 204 255
Я читал это, чтобы создать сетки во время выполнения с помощью скрипта, подобного этому:
string[] buffer;
for (int i = 0; i < Area.nPoints; i++)
{
buffer = sr.ReadLine().Split();
Area.AddPoint(new Vector3(float.Parse(buffer[0]),
float.Parse(buffer[1]), float.Parse(buffer[2])));
}
Это работает, но, поскольку я читаю линии и разделяю их, это довольно медленно, и у меня есть около 75 миллионов строк (точек) в моем текстовом файле. Я узнал, что могу преобразовать его в двоичный файл, и чтение будет быстрее, чем я, и это было намного быстрее. Однако, теперь преобразование в двоичную часть происходит довольно медленно, я хотел спросить вас о том, как я преобразовал.
void WriteValues()
{
string[] buffer;
for (int i = 0; i < numPoints; i++)
{
buffer = sr.ReadLine().Split();
for (int j = 0; i < 3; i++)
{
wr.Write(float.Parse(buffer[j]));
}
}
wr.Close();
}
Затем я читаю это с BinaryReader.ReadSingle()
, но это занимает намного больше времени, чем чтение непосредственно из текста, потому что я снова читаю строку и разделяю ее.
Мой вопрос: могу ли я прочитать, скажем, следующие 1000 строк буферизуют его, а затем писать вместо чтения каждой строки? Будет ли это иметь значение. Если так, как я могу использовать поток один раз на каждые 1000 строк.
Кроме того, когда я преобразовал строку в двоичный файл, как я могу прочитать каждый float в строке, не разбивая строку? Заранее спасибо за любую помощь!
Я пытаюсь сделать это для визуализации облака точек в моем мобильном телефоне с помощью дополненной реальности. Поэтому я хочу выполнить сканирование, экспортировать облако точек, импортировать его в Unity и создать сетку, используя эти точки без триангуляции, но при моем первоначальном подходе его импорт занимает 15-18 минут. После преобразования в двоичный файл это займет не более 3 минут, что нормально. Однако на этот раз преобразование в двоичный файл занимает много времени:)