A Swift library for reading and writing files.
-
MemoryMappedFile: using mmap
-
StreamedFile: using FileHandle (syscall)
-
ConcatenatedMemoryMappedFile: using mmap. Treats multiple files as one continuous virtual file.
-
StreamedFile: using FileHandle (syscall). Treats multiple files as one continuous virtual file.
MemoryMappedFile/StreamedFile have the same API available for both.
Available methods are defined in the FileIOProtocol
This library separates file I/O into three orthogonal concerns:
- Capability: what operations are supported (
_FileIOProtocol) - Role: how the object is used (
FileIOProtocol,FileIOSiliceProtocol) - Implementation strategy: how I/O is performed (memory-mapped or streamed)
The following diagram illustrates the relationships between the core protocols in this library.
graph TD
_FileIOProtocol --> FileIOProtocol
_FileIOProtocol --> FileIOSiliceProtocol
_FileIOProtocol --> _MemoryMappedFileIOProtocol
_FileIOProtocol --> _StreamedFileIOProtocol
FileIOProtocol --> MemoryMappedFileIOProtocol
FileIOProtocol --> StreamedFileIOProtocol
_MemoryMappedFileIOProtocol --> MemoryMappedFileIOProtocol
_StreamedFileIOProtocol --> StreamedFileIOProtocol
FileIOProtocol --> FileSlice[associatedtype FileSlice]
FileSlice --> FileIOSiliceProtocol
_FileIOProtocol --> ResizableFileIOProtocol
_FileIOProtocoldefines the fundamental read/write and synchronization operations.FileIOProtocolextends it with file-opening and slicing capabilities.FileIOSiliceProtocolrepresents a logical view into a file with abaseOffset.ResizableFileIOProtocoladds structural mutation operations such as insert and delete._MemoryMappedFileIOProtocoland_StreamedFileIOProtocoldescribe low-level implementation traits.MemoryMappedFileIOProtocolandStreamedFileIOProtocolcombine implementation traits withFileIOProtocol.
FileIO is released under the MIT License. See LICENSE