public string TryToReadNextString() {
var stream = BaseStream;
const int l = 2048;
var b = new byte[l + 4];
int bytesRead;
while ((bytesRead = stream.Read(b, 4, l)) > 0) {
var i = 3;
while (i < bytesRead) {
if (!IsStringCharacter(b[i])) {
i += 4;
} else if (!IsStringCharacter(b[i - 1])) {
i += 3;
} else if (!IsStringCharacter(b[i - 2])) {
i += 2;
} else if (!IsStringCharacter(b[i - 3])) {
++i;
} else {
var sb = new StringBuilder();
for (i = i - 3; i < bytesRead; i++) {
var n = b[i];
if (IsStringCharacter(n)) {
sb.Append((char)n);
} else {
break;
}
}
if (i == bytesRead) {
int n;
while ((n = stream.ReadByte()) != -1) {
if (IsStringCharacter(n)) {
sb.Append((char)n);
} else {
BaseStream.Seek(-1, SeekOrigin.Current);
break;
}
}
} else {
BaseStream.Seek(i - bytesRead - 4, SeekOrigin.Current);
}
return sb.ToString();
}
}
b[0] = b[l];
b[1] = b[l + 1];
b[2] = b[l + 2];
b[3] = b[l + 3];
}
return null;
}
protected override void LoadOrThrow() { base.LoadOrThrow(); Size = new FileInfo(Location).Length; if (Id == PreviousReplayName) { IsNew = true; } if (!SettingsHolder.Drive.TryToLoadReplays) { return; } try { using (var reader = new ReplayReader(Location)) { var version = reader.ReadInt32(); if (version >= 0xe) { reader.ReadBytes(8); WeatherId = reader.ReadString(); TrackId = reader.ReadString(); TrackConfiguration = reader.ReadString(); } else { TrackId = reader.ReadString(); } ErrorIf(TracksManager.Instance.GetWrapperById(TrackId) == null, AcErrorType.Replay_TrackIsMissing, TrackId); CarId = reader.TryToReadNextString(); try { DriverName = reader.ReadString(); reader.ReadInt64(); CarSkinId = reader.ReadString(); } catch (Exception) { // ignored } } ParsedSuccessfully = true; } catch (Exception e) { ParsedSuccessfully = false; throw new AcErrorException(this, AcErrorType.Load_Base, e); } }