Я на Windows, и я буду работать только с Windows.
У меня есть вопрос об открытии больших файлов (PTX).
В каждой строке у меня будут координаты точек X Y Z I {R G B}
({R, G, B} не должны присутствовать).
Поскольку мои файлы огромны (иногда> 100Go), я хотел бы быстро прочитать их, используя карту памяти (я никогда раньше этого не делал), или хотя бы прочитать кусок памяти вместо того, чтобы читать его построчно.
Мой вопрос: если я читаюкусок памяти с использованием, например,
ifstream bigFile("mybigfile.dat");
constexpr size_t bufferSize = 1024 * 1024;
unique_ptr<char[]> buffer(new char[bufferSize]);
while (bigFile)
{
bigFile.read(buffer.get(), bufferSize);
// process data in buffer
}
, есть ли способ быть уверенным, что мой буфер не остановится в середине строки?
Например, мои файлы
x1 y1 z1 i1 r1 g1 b1
x2 y2 z2 i2 r2 g2 b2
x3 y3 z3 i3 r3 g3 b3
x4 y4 z4 i4 r4 g4 b4
x5 y5 z5 i5 r5 g5 b5
, и я хочу создать std::vector<Point>
.Поэтому я читаю размер буфера этого файла, помещаю его в буфер, а затем беру данные из буфера для создания моих точек.Но как я могу быть уверен, что буфер не остановится на r3
?
Если буфер содержит x1 y1 z1 i1 r1 g1 b1 x2 y2 z2 i2 r2 g2 b2 x3 y3 z3 i3 r3
, я не могу создать точку, используя только x3, y3, z3, i3, r3
.Мне бы тоже понадобились g3
и b3
.
Есть ли способ позаботиться об этом?Я надеюсь, что это понятно, английский не мой родной язык, и я не уверен, что объяснил это хорошо ...