本文整理汇总了C++中FArchive::Serialize方法的典型用法代码示例。如果您正苦于以下问题:C++ FArchive::Serialize方法的具体用法?C++ FArchive::Serialize怎么用?C++ FArchive::Serialize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FArchive
的用法示例。
在下文中一共展示了FArchive::Serialize方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SaveToFile
bool FBuildPatchAppManifest::SaveToFile(const FString& Filename, bool bUseBinary)
{
bool bSuccess = false;
FArchive* FileOut = IFileManager::Get().CreateFileWriter(*Filename);
if (FileOut)
{
if (bUseBinary)
{
Data->ManifestFileVersion = EBuildPatchAppManifestVersion::GetLatestVersion();
FManifestWriter ManifestData;
Serialize(ManifestData);
ManifestData.Finalize();
if (!ManifestData.IsError())
{
int32 DataSize = ManifestData.TotalSize();
TArray<uint8> TempCompressed;
TempCompressed.AddUninitialized(DataSize);
int32 CompressedSize = DataSize;
bool bDataIsCompressed = FCompression::CompressMemory(
static_cast<ECompressionFlags>(COMPRESS_ZLIB | COMPRESS_BiasMemory),
TempCompressed.GetData(),
CompressedSize,
ManifestData.GetBytes().GetData(),
DataSize);
TempCompressed.SetNum(CompressedSize);
TArray<uint8>& FileData = bDataIsCompressed ? TempCompressed : ManifestData.GetBytes();
FManifestFileHeader Header;
*FileOut << Header;
Header.HeaderSize = FileOut->Tell();
Header.StoredAs = bDataIsCompressed ? EManifestFileHeader::STORED_COMPRESSED : EManifestFileHeader::STORED_RAW;
Header.DataSize = DataSize;
Header.CompressedSize = bDataIsCompressed ? CompressedSize : 0;
FSHA1::HashBuffer(FileData.GetData(), FileData.Num(), Header.SHAHash.Hash);
FileOut->Seek(0);
*FileOut << Header;
FileOut->Serialize(FileData.GetData(), FileData.Num());
bSuccess = !FileOut->IsError();
}
}
else
{
Data->ManifestFileVersion = EBuildPatchAppManifestVersion::GetLatestJsonVersion();
FString JSONOutput;
SerializeToJSON(JSONOutput);
FTCHARToUTF8 JsonUTF8(*JSONOutput);
FileOut->Serialize((UTF8CHAR*)JsonUTF8.Get(), JsonUTF8.Length() * sizeof(UTF8CHAR));
}
FileOut->Close();
delete FileOut;
FileOut = nullptr;
}
return bSuccess;
}
示例2: WriteRiffHeader
static void WriteRiffHeader(FArchive &Ar, int FileLength)
{
assert(!Ar.IsLoading);
static const char *RIFF = "RIFF";
Ar.Serialize((char*)RIFF, 4);
Ar << FileLength;
static const char *WAVE = "WAVE";
Ar.Serialize((char*)WAVE, 4);
}
示例3: SaveSound
static void SaveSound(const UObject *Obj, void *Data, int DataSize, const char *DefExt)
{
// check for enough place for header
if (DataSize < 16)
{
appPrintf("... empty sound %s ?\n", Obj->Name);
return;
}
const char *ext = DefExt;
if (!memcmp(Data, "OggS", 4))
ext = "ogg";
else if (!memcmp(Data, "RIFF", 4))
ext = "wav";
else if (!memcmp(Data, "FSB4", 4))
ext = "fsb"; // FMOD sound bank
else if (!memcmp(Data, "MSFC", 4))
ext = "mp3"; // PS3 MP3 codec
FArchive *Ar = CreateExportArchive(Obj, "%s.%s", Obj->Name, ext);
if (Ar)
{
Ar->Serialize(Data, DataSize);
delete Ar;
}
}
示例4: ProcessWriteFile
void FNetworkFileServerClientConnection::ProcessWriteFile( FArchive& In, FArchive& Out )
{
// Get Handle ID
uint64 HandleId = 0;
In << HandleId;
int64 BytesWritten = 0;
IFileHandle* File = FindOpenFile(HandleId);
if (File)
{
int64 BytesToWrite = 0;
In << BytesToWrite;
uint8* Source = (uint8*)FMemory::Malloc(BytesToWrite);
In.Serialize(Source, BytesToWrite);
if (File->Write(Source, BytesToWrite))
{
BytesWritten = BytesToWrite;
}
FMemory::Free(Source);
}
Out << BytesWritten;
}
示例5: LoadFileToString
/**
* Load a text file to an FString.
* Supports all combination of ANSI/Unicode files and platforms.
* @param Result string representation of the loaded file
* @param Filename name of the file to load
* @param VerifyFlags flags controlling the hash verification behavior ( see EHashOptions )
*/
bool FFileHelper::LoadFileToString( FString& Result, const TCHAR* Filename, uint32 VerifyFlags )
{
FArchive* Reader = IFileManager::Get().CreateFileReader( Filename );
if( !Reader )
{
return 0;
}
int32 Size = Reader->TotalSize();
uint8* Ch = (uint8*)FMemory::Malloc(Size);
Reader->Serialize( Ch, Size );
bool Success = Reader->Close();
delete Reader;
BufferToString( Result, Ch, Size );
// handle SHA verify of the file
if( (VerifyFlags & EHashOptions::EnableVerify) && ( (VerifyFlags & EHashOptions::ErrorMissingHash) || FSHA1::GetFileSHAHash(Filename, NULL) ) )
{
// kick off SHA verify task. this frees the buffer on close
FBufferReaderWithSHA Ar( Ch, Size, true, Filename, false, true );
}
else
{
// free manually since not running SHA task
FMemory::Free(Ch);
}
return Success;
}
示例6: appCreateFileReader
byte *FindXprData(const char *Name, int *DataSize)
{
// scan xprs
static bool ready = false;
if (!ready)
{
ready = true;
appEnumGameFiles(ReadXprFile, "xpr");
}
// find a file
for (int i = 0; i < xprFiles.Num(); i++)
{
XprInfo *Info = &xprFiles[i];
for (int j = 0; j < Info->Items.Num(); j++)
{
XprEntry *File = &Info->Items[j];
if (strcmp(File->Name, Name) == 0)
{
// found
appPrintf("Loading stream %s from %s (%d bytes)\n", Name, Info->File->RelativeName, File->DataSize);
FArchive *Reader = appCreateFileReader(Info->File);
Reader->Seek(File->DataOffset);
byte *buf = (byte*)appMalloc(File->DataSize);
Reader->Serialize(buf, File->DataSize);
delete Reader;
if (DataSize) *DataSize = File->DataSize;
return buf;
}
}
}
appPrintf("WARNING: external stream %s was not found\n", Name);
if (DataSize) *DataSize = 0;
return NULL;
}
示例7: GenerateHashForFile
bool GenerateHashForFile( FString Filename, uint8 FileHash[16])
{
FArchive* File = IFileManager::Get().CreateFileReader(*Filename);
if ( File == NULL )
return false;
uint64 TotalSize = File->TotalSize();
uint8* ByteBuffer = new uint8[TotalSize];
File->Serialize(ByteBuffer, TotalSize);
delete File;
File = NULL;
FMD5 FileHasher;
FileHasher.Update(ByteBuffer, TotalSize);
delete[] ByteBuffer;
FileHasher.Final(FileHash);
return true;
// uint8 DestFileHash[20];
}
示例8: ProcessReadFile
void FNetworkFileServerClientConnection::ProcessReadFile( FArchive& In, FArchive& Out )
{
// Get Handle ID
uint64 HandleId = 0;
In << HandleId;
int64 BytesToRead = 0;
In << BytesToRead;
int64 BytesRead = 0;
IFileHandle* File = FindOpenFile(HandleId);
if (File)
{
uint8* Dest = (uint8*)FMemory::Malloc(BytesToRead);
if (File->Read(Dest, BytesToRead))
{
BytesRead = BytesToRead;
Out << BytesRead;
Out.Serialize(Dest, BytesRead);
}
else
{
Out << BytesRead;
}
FMemory::Free(Dest);
}
else
{
Out << BytesRead;
}
}
示例9: Serialize
void UChildActorComponent::Serialize(FArchive& Ar)
{
Super::Serialize(Ar);
if (Ar.HasAllPortFlags(PPF_DuplicateForPIE))
{
// PIE duplication should just work normally
Ar << ChildActorTemplate;
}
else if (Ar.HasAllPortFlags(PPF_Duplicate))
{
if (GIsEditor && Ar.IsLoading() && !IsTemplate())
{
// If we're not a template then we do not want the duplicate so serialize manually and destroy the template that was created for us
Ar.Serialize(&ChildActorTemplate, sizeof(UObject*));
if (AActor* UnwantedDuplicate = static_cast<AActor*>(FindObjectWithOuter(this, AActor::StaticClass())))
{
UnwantedDuplicate->MarkPendingKill();
}
}
else if (!GIsEditor && !Ar.IsLoading() && !GIsDuplicatingClassForReinstancing)
{
// Avoid the archiver in the duplicate writer case because we want to avoid the duplicate being created
Ar.Serialize(&ChildActorTemplate, sizeof(UObject*));
}
else
{
// When we're loading outside of the editor we won't have created the duplicate, so its fine to just use the normal path
// When we're loading a template then we want the duplicate, so it is fine to use normal archiver
// When we're saving in the editor we'll create the duplicate, but on loading decide whether to take it or not
Ar << ChildActorTemplate;
}
}
#if WITH_EDITOR
// Since we sometimes serialize properties in instead of using duplication if we are a template
// and are not pointing at a component we own we'll need to fix that
if (ChildActorTemplate && ChildActorTemplate->GetOuter() != this && IsTemplate())
{
const FString TemplateName = FString::Printf(TEXT("%s_%s_CAT"), *GetName(), *ChildActorClass->GetName());
ChildActorTemplate = CastChecked<AActor>(StaticDuplicateObject(ChildActorTemplate, this, *TemplateName));
}
#endif
}
示例10: appFindGameFile
static byte *FindBioTexture(const UTexture *Tex)
{
int needSize = Tex->CachedBulkDataSize & 0xFFFFFFFF;
#if DEBUG_BIO_BULK
appPrintf("Search for ... %s (size=%X)\n", Tex->Name, needSize);
#endif
BioReadBulkCatalog();
for (int i = 0; i < bioCatalog.Num(); i++)
{
BioBulkCatalog &Cat = bioCatalog[i];
for (int j = 0; j < Cat.Files.Num(); j++)
{
const BioBulkCatalogFile &File = Cat.Files[j];
for (int k = 0; k < File.Items.Num(); k++)
{
const BioBulkCatalogItem &Item = File.Items[k];
if (!strcmp(Tex->Name, Item.ObjectName))
{
if (abs(needSize - Item.DataSize) > 0x4000) // differs in 16k
{
#if DEBUG_BIO_BULK
appPrintf("... Found %s in %s with wrong BulkDataSize %X (need %X)\n", Tex->Name, *File.Filename, Item.DataSize, needSize);
#endif
continue;
}
#if DEBUG_BIO_BULK
appPrintf("... Found %s in %s at %X size %X (%dx%d fmt=%d bpp=%g strip:%d mips:%d)\n", Tex->Name, *File.Filename, Item.DataOffset, Item.DataSize,
Tex->USize, Tex->VSize, Tex->Format, (float)Item.DataSize / (Tex->USize * Tex->VSize),
Tex->HasBeenStripped, Tex->StrippedNumMips);
#endif
// found
const CGameFileInfo *bulkFile = appFindGameFile(File.Filename);
if (!bulkFile)
{
// no bulk file
appPrintf("Decompressing %s: %s is missing\n", Tex->Name, *File.Filename);
return NULL;
}
appPrintf("Reading %s mip level %d (%dx%d) from %s\n", Tex->Name, 0, Tex->USize, Tex->VSize, bulkFile->RelativeName);
FArchive *Reader = appCreateFileReader(bulkFile);
Reader->Seek(Item.DataOffset);
byte *buf = (byte*)appMalloc(max(Item.DataSize, needSize));
Reader->Serialize(buf, Item.DataSize);
delete Reader;
return buf;
}
}
}
}
#if DEBUG_BIO_BULK
appPrintf("... Bulk for %s was not found\n", Tex->Name);
#endif
return NULL;
}
示例11: SaveArrayToFile
/**
* Save a binary array to a file.
*/
bool FFileHelper::SaveArrayToFile( const TArray<uint8>& Array, const TCHAR* Filename, IFileManager* FileManager /*= &IFileManager::Get()*/ )
{
FArchive* Ar = FileManager->CreateFileWriter( Filename, 0 );
if( !Ar )
{
return 0;
}
Ar->Serialize(const_cast<uint8*>(Array.GetData()), Array.Num());
delete Ar;
return true;
}
示例12: SaveArrayToFile
bool AHeatmapDataCollector::SaveArrayToFile(const TArray<int16>& Array, const TCHAR * Filename, IFileManager * FileManager, uint32 WriteFlags) const
{
FArchive* Ar = FileManager->CreateFileWriter(Filename, WriteFlags);
if (!Ar)
{
return 0;
}
Ar->Serialize(const_cast<int16*>(Array.GetData()), Array.Num());
delete Ar;
return true;
}
示例13: WriteFile
bool UJavascriptLibrary::WriteFile(UObject* Object, FString Filename)
{
FArchive* Writer = IFileManager::Get().CreateFileWriter(*Filename);
if (!Writer)
{
return false;
}
Writer->Serialize(FArrayBufferAccessor::GetData(), FArrayBufferAccessor::GetSize());
return Writer->Close();
}
示例14: BufferedCopyFile
bool BufferedCopyFile(FArchive& Dest, FArchive& Source, const FPakEntry& Entry, void* Buffer, int64 BufferSize)
{
// Align down
BufferSize = BufferSize & ~(FAES::AESBlockSize-1);
int64 RemainingSizeToCopy = Entry.Size;
while (RemainingSizeToCopy > 0)
{
const int64 SizeToCopy = FMath::Min(BufferSize, RemainingSizeToCopy);
// If file is encrypted so we need to account for padding
int64 SizeToRead = Entry.bEncrypted ? Align(SizeToCopy,FAES::AESBlockSize) : SizeToCopy;
Source.Serialize(Buffer,SizeToRead);
if (Entry.bEncrypted)
{
FAES::DecryptData((uint8*)Buffer,SizeToRead);
}
Dest.Serialize(Buffer, SizeToCopy);
RemainingSizeToCopy -= SizeToRead;
}
return true;
}
示例15: UncompressCopyFile
bool UncompressCopyFile(FArchive& Dest, FArchive& Source, const FPakEntry& Entry, uint8*& PersistentBuffer, int64& BufferSize)
{
if (Entry.UncompressedSize == 0)
{
return false;
}
int64 WorkingSize = Entry.CompressionBlockSize;
int32 MaxCompressionBlockSize = FCompression::CompressMemoryBound((ECompressionFlags)Entry.CompressionMethod, WorkingSize);
WorkingSize += MaxCompressionBlockSize;
if (BufferSize < WorkingSize)
{
PersistentBuffer = (uint8*)FMemory::Realloc(PersistentBuffer, WorkingSize);
BufferSize = WorkingSize;
}
uint8* UncompressedBuffer = PersistentBuffer+MaxCompressionBlockSize;
for (uint32 BlockIndex=0, BlockIndexNum=Entry.CompressionBlocks.Num(); BlockIndex < BlockIndexNum; ++BlockIndex)
{
uint32 CompressedBlockSize = Entry.CompressionBlocks[BlockIndex].CompressedEnd - Entry.CompressionBlocks[BlockIndex].CompressedStart;
uint32 UncompressedBlockSize = (uint32)FMath::Min<int64>(Entry.UncompressedSize - Entry.CompressionBlockSize*BlockIndex, Entry.CompressionBlockSize);
Source.Seek(Entry.CompressionBlocks[BlockIndex].CompressedStart);
uint32 SizeToRead = Entry.bEncrypted ? Align(CompressedBlockSize, FAES::AESBlockSize) : CompressedBlockSize;
Source.Serialize(PersistentBuffer, SizeToRead);
if (Entry.bEncrypted)
{
FAES::DecryptData(PersistentBuffer, SizeToRead);
}
if(!FCompression::UncompressMemory((ECompressionFlags)Entry.CompressionMethod,UncompressedBuffer,UncompressedBlockSize,PersistentBuffer,CompressedBlockSize))
{
return false;
}
Dest.Serialize(UncompressedBuffer,UncompressedBlockSize);
}
return true;
}