stream-reader

3.5.2

A simple stream protocol in Swift with concrete implementations
Frizlab/stream-reader

What's New

StreamReader 3.5.2

2024-03-05T00:02:18Z

Stream Reader

A simple stream reader protocol for Swift named StreamReader, with two concrete implementations: GenericStreamReader and DataReader.

The GenericStreamReader can read from any GenericReadStream, which the FileDescriptor (from SystemPackage), FileHandle and IntputStream classes have been made to conform to.

Usage Examples

Reading a Stream to the End

let data = ...
let reader = DataReader(data: data)
let readData = try reader.readDataToEnd()
assert(readData == data)

Reading a Stream Until a Delimitor Is Found

let inputStream = ...
let reader = InputStreamReader(stream: inputStream, bufferSize: 1024, bufferSizeIncrement: 512)
/* Read the stream until a newline (whether macOS or Classic MacOS) is found, and returns the data without the newline. */
let (line, separator) = try reader.readData(upTo: [Data("\n".utf8), Data("\r".utf8)], matchingMode: .anyMatchWins, failIfNotFound: false, includeDelimiter: false)
_ = try reader.readData(size: separator.count) /* We must read the line separator before next read, probably :) */

Note: In the example above, if the file has Windows new lines, this will add an empty new line after each line (the separator for Windows being \r\n).

Stream Reader has also a dedicated method to read a line in a stream:

/* Does not return the line separator, _but_ set stream position after the line separator. */
let lineData = try reader.readLine(allowUnixNewLines: true, allowLegacyMacOSNewLines: true, allowWindowsNewLines: true).line

TODO

Make the reads async? This would change a lot of things, but the core of the project should stay the same.

Or maybe just be thread-safe, idk.

Description

  • Swift Tools 5.2.0
View More Packages from this Author

Dependencies

Last updated: Wed Apr 03 2024 17:06:26 GMT-0900 (Hawaii-Aleutian Daylight Time)