项目作者: tris-code

项目描述 :
MessagePack serializer - msgpack.org[Swift]
高级语言: Swift
项目地址: git://github.com/tris-code/messagepack.git
创建时间: 2019-04-05T20:35:26Z
项目社区:https://github.com/tris-code/messagepack

开源协议:The Unlicense

下载


MessagePack

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it’s faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

Package.swift

  1. .package(url: "https://github.com/swiftstack/messagepack.git", .branch("dev"))

Memo

  1. public enum MessagePack {
  2. case `nil`
  3. case int(Int)
  4. case uint(UInt)
  5. case bool(Bool)
  6. case float(Float)
  7. case double(Double)
  8. case string(String)
  9. case binary([UInt8])
  10. case array([MessagePack])
  11. case map([MessagePack : MessagePack])
  12. case extended(Extended)
  13. public struct Extended {
  14. public let type: Int8
  15. public let data: [UInt8]
  16. public init(type: Int8, data: [UInt8]) {
  17. self.type = type
  18. self.data = data
  19. }
  20. }
  21. }

Usage

You can find this code and more in examples.

Basic API

  1. let hey = MessagePack("hey there!")
  2. let bytes = try MessagePack.encode(hey)
  3. let original = String(try MessagePack.decode(bytes: bytes))

Stream API

  1. let hey = MessagePack("hey there!")
  2. let stream = BufferedStream(stream: NetworkStream(socket: client))
  3. try MessagePack.encode(hey, to: stream)
  4. try stream.flush()
  5. let original = String(try MessagePack.decode(from: stream))

Performance optimized

  1. let output = OutputByteStream()
  2. var encoder = MessagePackWriter(output)
  3. try encoder.encode("one")
  4. try encoder.encode(2)
  5. try encoder.encode(3.0)
  6. let encoded = output.bytes
  7. var decoder = MessagePackReader(InputByteStream(encoded))
  8. let string = try decoder.decode(String.self)
  9. let int = try decoder.decode(UInt8.self)
  10. let double = try decoder.decode(Double.self)
  11. print("decoded manually: \(string), \(int), \(double)")