Я использую телефон Windows Mobile Compact Edition 6.5 и записываю двоичные данные в файл с Bluetooth.Эти файлы становятся достаточно большими, 16M +, и что мне нужно сделать, это как только файл будет записан, мне нужно найти в файле начальный символ, а затем удалить все, прежде чем, таким образом, устраняя мусор.Я не могу сделать это встроенным, когда данные поступают из-за проблем с графикой и скоростью, так как я получаю много поступающих данных, и уже слишком много условий для входящих данных.Я подумал, что лучше всего опубликовать процесс.В любом случае, вот моя дилемма, скорость поиска начальных байтов, и перезапись файла занимает иногда 5 минут или больше ... Я в основном перемещаю файл во временный файл, анализирую его и переписываю целый новый файл.Я должен сделать это побайтно.
private void closeFiles() {
try {
// Close file stream for raw data.
if (this.fsRaw != null) {
this.fsRaw.Flush();
this.fsRaw.Close();
// Move file, seek the first sync bytes,
// write to fsRaw stream with sync byte and rest of data after it
File.Move(this.s_fileNameRaw, this.s_fileNameRaw + ".old");
FileStream fsRaw_Copy = File.Open(this.s_fileNameRaw + ".old", FileMode.Open);
this.fsRaw = File.Create(this.s_fileNameRaw);
int x = 0;
bool syncFound = false;
// search for sync byte algorithm
while (x != -1) {
... logic to search for sync byte
if (x != -1 && syncFound) {
this.fsPatientRaw.WriteByte((byte)x);
}
}
this.fsRaw.Close();
fsRaw_Copy.Close();
File.Delete(this.s_fileNameRaw + ".old");
}
} catch(IOException e) {
CLogger.WriteLog(ELogLevel.ERROR,"Exception in writing: " + e.Message);
}
}
Должен быть более быстрый способ, чем этот!
------------ Тестирование времени с использованием ответа -------------
Начальная проверка моего пути с чтением одного байта ии запись в один байт:
27 Kb/sec
с использованием ответа ниже и буфера 32768 байт:
321 Kb/sec
с использованием ответа ниже и буфера 65536 байтов:
501 Kb/sec