scodec / Scodec Stream
Programming Languages
Labels
Projects that are alternatives of or similar to Scodec Stream
scodec-stream
Scodec-stream is a library for streaming binary encoding and decoding. It is built atop scodec and fs2. Here's a brief example of its use:
import scodec.codecs._
import scodec.stream._
import scodec.bits._
import cats.effect.{Blocker, IO}
import fs2.Stream
val frames: StreamDecoder[ByteVector] = StreamDecoder.many(int32)
.flatMap { numBytes => StreamDecoder.once(bytes(numBytes)) }
val filePath = java.nio.file.Paths.get("path/to/file")
val s: Stream[IO, ByteVector] =
Stream.resource(Blocker[IO]).flatMap { blocker =>
fs2.io.file.readAll[IO](filePath, blocker, 4096).through(frames.toPipeByte)
}
When consumed, s
will incrementally read chunks from "largefile.bin"
, then decode a stream of frames, where each frame is expected to begin with a number of bytes specified as a 32-bit signed int (the int32
codec), followed by a frame payload of that many bytes. Nothing happens until the s
stream is consumed, and s
will ensure the file is closed in the event of an error or normal termination of the consumer.
See the MPEG PCAP decoding example for a more sophisticated use case.
Links:
- Administrative
- Getting Binaries
- API docs
- scodec-protocols has useful streaming encoders and decoders for various domains and is a nice place to look for examples of the library in use.
Administrative
This project is licensed under a 3-clause BSD license.
People are expected to follow the Typelevel Code of Conduct when discussing scodec on the Github page, Gitter channel, mailing list, or other venues.
Concerns or issues can be sent to Michael Pilquist ([email protected]) or to Typelevel.
Getting Binaries
See the releases page on the website.
Code of Conduct
See the Code of Conduct.