Imports System.IO
Imports System.IO.Compression
Imports Microsoft.VisualBasic.ApplicationServices.Zip
Imports Microsoft.VisualBasic.Language
Imports Microsoft.VisualBasic.MachineLearning.Darwinism.NonlinearGridTopology
'''
''' 使用zip压缩的形式,将population保存为临时文件
'''
Public Class PopulationZip
ReadOnly target$
ReadOnly index As VBInteger = Scan0
ReadOnly chunkSize%
'''
''' The target zip file
'''
'''
Sub New(target$, Optional chunkSize% = 20480)
Me.target = target
Me.chunkSize = chunkSize
End Sub
Public Sub Add(genome As GridSystem)
Dim temp = App.GetAppSysTempFile($".grid/{++index}", App.PID, "population_")
Using file As FileStream = temp.Open
Call genome.Serialize(file, chunkSize:=chunkSize)
End Using
Call ZipLib.AddToArchive(
files:={temp},
archiveFullName:=target,
action:=ArchiveAction.Merge,
fileOverwrite:=Overwrite.Always,
compression:=CompressionLevel.Fastest
)
Call temp.DeleteFile
End Sub
Public Function GetIndividual(i As Integer) As GridSystem
Dim buffer As MemoryStream = ZipStreamReader.GetZipSubStream(target, CStr(i))
If buffer Is Nothing Then
Throw New MissingMemberException(i)
Else
Using buffer
Return buffer.LoadGridSystem
End Using
End If
End Function
End Class