A simple and easy to use library for reading and writing data streams.
Project description
datastream
Because construct
was too complicated.
This is a simple and easy to use library that provides two classes. One class serializes data, and the other one deserializes. These classes behave like streams in which they have read
, write
, close
among other stream related functions. The goal of this library is to be as simple as possible while providing flexibility.
To install the library, use the following:
python -m pip install --user -U pydatastreams
To import the library, use the following:
from datastream import SerializingStream, DeserializingStream, TwoWayStream, ByteOrder
Retrieving serialized data from a SerializingStream:
with SerializingStream() as stream:
stream.write_int32(42)
serialized = stream.bytes()
# this also works
serialized = bytes(stream)
Note: This library also contains a stream for both serializing and deserializing data. This stream is called TwoWayStream
.
The stream classes support serializing/deserializing the standard data types:
Data Type | Description | Serializer | Deserializer |
---|---|---|---|
int8_t |
Signed 8-bit number | write_int8(value: int) |
read_int8() -> int |
uint8_t |
Unsigned 8-bit number | write_uint8(value: int) |
read_uint8() -> int |
int16_t |
Signed 16-bit number | write_int16(value: int) |
read_int16() -> int |
uint16_t |
Unsigned 16-bit number | write_uint16(value: int) |
read_uint16() -> int |
int32_t |
Signed 32-bit number | write_int32(value: int) |
read_int32() -> int |
uint32_t |
Unsigned 32-bit number | write_uint32(value: int) |
read_uint32() -> int |
int64_t |
Signed 64-bit number | write_int64(value: int) |
read_int64() -> int |
uint64_t |
Unsigned 64-bit number | write_uint64(value: int) |
read_uint64() -> int |
float |
32-bit floating point number | write_float(value: float) |
read_float() -> float |
double |
64-bit floating point number | write_double(value: float) |
read_double() -> float |
Additionally, the stream classes also provide the following non-standard data types:
Data Type | Description | Serializer | Deserializer |
---|---|---|---|
bool |
True/False value encoded as a single byte | write_bool(value: bool) |
read_bool() -> bool |
uleb128 |
Variable sized unsigned 128-bit number | write_uleb128(value: int) |
read_uleb128() -> int |
write_uleb128_safe(value: int, max_bytes: int = 16) |
read_uleb128_safe(max_bytes: int = 16) -> int |
||
sleb128 |
Variable sized signed 128-bit number | write_sleb128(value: int) |
read_sleb128() -> int |
write_sleb128_safe(value: int, max_bytes: int = 16) |
read_sleb128_safe(max_bytes: int = 16) -> int |
Finally, the stream classes also provide the following utility functions:
Function | Description |
---|---|
set(buffer: bytes | typing.IO[bytes]) |
Sets the backing stream to the given buffer. DeserializingStream only. |
read_until(terminator: bytes) -> bytes |
Reads len(terminator) bytes from the stream until terminator is found. DeserializingStream only. |
read(size: int) -> bytes |
Reads up to size bytes from the backing stream. |
write(data: bytes) |
Writes the given data to the backing stream. |
size() -> int |
Returns the size of the backing stream. |
seek(offset: int, whence: int = io.SEEK_SET) |
Change the stream position to the given offset. |
tell() -> int |
Returns the current position of the stream. |
close() |
Closes the backing stream. |
remaining() -> int |
Returns the number of bytes remaining in the backing stream. |
clone() -> typing.Self |
Returns a new instance of the same class with the same byte order and contents. |
substream(start: int, end: int) -> typing.Self |
Returns a new instance of the same class, representing a substream of the current stream. |
peek(size: int) -> bytes |
Returns the next size bytes from the stream without advancing the position. |
seekpeek(offset: int, size: int) -> bytes |
Seeks to the specified offset in the data stream, reads the specified number of bytes, and then restores the original position. |
search(data: bytes) -> int |
Searches for the given data in the backing stream. |
rsearch(data: bytes) -> int |
Searches for the given data in the reverse order within the backing stream. |
clear() |
Clears the backing stream by truncating it to 0 bytes and resetting the stream position to the beginning. |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pydatastreams-1.3.2.tar.gz
.
File metadata
- Download URL: pydatastreams-1.3.2.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.25.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | abae910ccf743b8e91310852206f1c8e61c19fea3d8687adc8a4e1fda7f908a9 |
|
MD5 | cda023af98591861d248a2e03b262cc5 |
|
BLAKE2b-256 | 6009b528eb424b1441634d31a0d669600d03b82c2e29dca91273901a7a88e272 |
File details
Details for the file pydatastreams-1.3.2-py3-none-any.whl
.
File metadata
- Download URL: pydatastreams-1.3.2-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.25.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a63018e82e4c92dca35fae992c84ac52ac6a9a19ee1197fbd2ce4bab0fdce543 |
|
MD5 | a9cfffd10dcd21b76839bc8b93f86682 |
|
BLAKE2b-256 | 972c40a7c5daa07620e1986fd4d1fe1794e46438ebd71e8b290210d614e97e57 |