0.0.3 release: docs, foxed dump formatting
This commit is contained in:
parent
ee20bfdee7
commit
b7784fec18
27
README.md
27
README.md
@ -1,9 +1,6 @@
|
|||||||
# Binary tools and BiPack serializer
|
# Binary tools and BiPack serializer
|
||||||
|
|
||||||
> beta version
|
Multiplatform binary tools collection, including portable serialization of the compact and fast [Bipack] format, and many useful tools to work with binary data, like CRC family checksums, dumps, etc. It works well also in the browser and in native targets.
|
||||||
|
|
||||||
Multiplatform binary tools collection, including portable serialization of the compact and fast [Bipack] format, that
|
|
||||||
works well also in the browser and in native targets.
|
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
@ -18,14 +15,12 @@ repositories {
|
|||||||
|
|
||||||
And add dependecy to the proper place in yuor project like this:
|
And add dependecy to the proper place in yuor project like this:
|
||||||
|
|
||||||
```
|
```kotlin
|
||||||
dependencies {
|
dependencies {
|
||||||
// ...
|
// ...
|
||||||
implementation("net.sergeych:mp_bintools:0.0.2-SNAPSHOT")
|
implementation("net.sergeych:mp_bintools:0.0.3")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Use your desired version.
|
|
||||||
TODO: specify maven: how?
|
|
||||||
|
|
||||||
# Bipack
|
# Bipack
|
||||||
|
|
||||||
@ -35,9 +30,9 @@ Bipack is a compact and efficient binary serialization library (and format) was
|
|||||||
|
|
||||||
### Allow easy unpacking existing binary structures
|
### Allow easy unpacking existing binary structures
|
||||||
|
|
||||||
Yuo describe your structure as `@Serializable` classes, and - voila, bipack decodes and encodes it for you!
|
Yuo describe your structure as `@Serializable` classes, and - voila, bipack decodes and encodes it for you! We aim to make it really easy to convert data from other binary formats by adding more format annotations
|
||||||
|
|
||||||
### - be as compact as possible
|
### Be as compact as possible
|
||||||
|
|
||||||
For this reason it is a binary notation, it uses binary form for decimal numbers and can use variery of encoding for
|
For this reason it is a binary notation, it uses binary form for decimal numbers and can use variery of encoding for
|
||||||
integers:
|
integers:
|
||||||
@ -52,7 +47,7 @@ See `object Varint`.
|
|||||||
Variable-length compact encoding for signed and unsigned integers use as few bytes as possible to encode integers. It is
|
Variable-length compact encoding for signed and unsigned integers use as few bytes as possible to encode integers. It is
|
||||||
used automatically when serializing integers. It is slightly more sophisticated than straight `Varint`.
|
used automatically when serializing integers. It is slightly more sophisticated than straight `Varint`.
|
||||||
|
|
||||||
### - do not reveal information about stored data
|
### Do not reveal information about stored data
|
||||||
|
|
||||||
Many extendable formats, like JSON, BSON, BOSS and may others are keeping data in key-value pairs. While it is good in
|
Many extendable formats, like JSON, BSON, BOSS and may others are keeping data in key-value pairs. While it is good in
|
||||||
many aspets, it has a clear disadvantages: it uses more space, and it reveals inner data structure to the world. It is
|
many aspets, it has a clear disadvantages: it uses more space, and it reveals inner data structure to the world. It is
|
||||||
@ -68,20 +63,18 @@ backward compatibility with already serialzied data or using volumous boilerplat
|
|||||||
versioning.
|
versioning.
|
||||||
|
|
||||||
Not to waste space and reveal more information that needed Bipack allows extending classes marked as [@Extendable] to be
|
Not to waste space and reveal more information that needed Bipack allows extending classes marked as [@Extendable] to be
|
||||||
extended with more data _appended to the end of list of fields with required defaul values_. For such classes Bipack
|
extended with more data _appended to the end of list of fields with required defaul values_. For such classes, Bipack stores the number of actually serialized fields and atuomatically uses default values for non-serialized ones when unpacking
|
||||||
stores number of actually serialized fields and atuomatically uses default values for non-serialized ones when unpacking
|
|
||||||
old data.
|
old data.
|
||||||
|
|
||||||
### - protect data with framing and CRC
|
### Protect data with framing and CRC
|
||||||
|
|
||||||
When needed, serialization lobrary allow to store/check CRC32 tag of the structure name with `@Framed` (can be overriden
|
When needed, serialization lobrary allow to store/check CRC32 tag of the structure name with `@Framed` (can be overriden
|
||||||
as usual with `@SerialName`), or be followed with CRC32 of the serialized binary data, that will be checked on
|
as usual with `@SerialName`), or be followed with CRC32 of the serialized binary data, that will be checked on
|
||||||
deserialization, using `@CrcProtected`. This allows to check the data consistency out of the box and only where needed.
|
deserialization, using `@CrcProtected`. This allows checking the data consistency out of the box and only where needed.
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
Use kotlinx serializatino as usual. There are following Bipack-specific annotation at your service. All class
|
Use kotlinx serializatino as usual. There are the following Bipack-specific annotations at your disposal (can be combined):
|
||||||
annotations could be combined.
|
|
||||||
|
|
||||||
## @Extendable
|
## @Extendable
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ plugins {
|
|||||||
val serialization_version = "1.3.4"
|
val serialization_version = "1.3.4"
|
||||||
|
|
||||||
group = "net.sergeych"
|
group = "net.sergeych"
|
||||||
version = "0.0.3-SNAPSHOT"
|
version = "0.0.3"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@ -74,6 +74,7 @@ kotlin {
|
|||||||
val commonTest by getting {
|
val commonTest by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("test"))
|
implementation(kotlin("test"))
|
||||||
|
implementation("net.sergeych:mp_stools:1.4.1")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val jvmMain by getting
|
val jvmMain by getting
|
||||||
|
@ -118,7 +118,7 @@ fun ByteArray.toDumpLines(wide: Boolean = false): List<String> {
|
|||||||
|
|
||||||
fun dumpChars(_from: Int): String {
|
fun dumpChars(_from: Int): String {
|
||||||
var from = _from
|
var from = _from
|
||||||
val b = StringBuilder(22)
|
val b = StringBuilder()
|
||||||
|
|
||||||
b.append('|')
|
b.append('|')
|
||||||
val max: Int = kotlin.math.min(size, from + lineSize)
|
val max: Int = kotlin.math.min(size, from + lineSize)
|
||||||
@ -162,7 +162,7 @@ fun ByteArray.toDumpLines(wide: Boolean = false): List<String> {
|
|||||||
if (line != null) {
|
if (line != null) {
|
||||||
val l = size
|
val l = size
|
||||||
var fill = lineSize - l % lineSize
|
var fill = lineSize - l % lineSize
|
||||||
if( fill > lineSize/2 ) line.append(" ")
|
if( fill > lineSize/2 && fill < lineSize ) line.append(" ")
|
||||||
if (fill < lineSize) while (fill-- > 0) line.append(" ")
|
if (fill < lineSize) while (fill-- > 0) line.append(" ")
|
||||||
val index = l - l % lineSize
|
val index = l - l % lineSize
|
||||||
line.append(dumpChars(if (index < l) index else l - lineSize))
|
line.append(dumpChars(if (index < l) index else l - lineSize))
|
||||||
|
19
src/commonTest/kotlin/bintools/TestTools.kt
Normal file
19
src/commonTest/kotlin/bintools/TestTools.kt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package bintools
|
||||||
|
|
||||||
|
import net.sergeych.bintools.toDump
|
||||||
|
import kotlin.test.Test
|
||||||
|
|
||||||
|
class TestTools {
|
||||||
|
@Test
|
||||||
|
fun testDump() {
|
||||||
|
// val src =
|
||||||
|
// "MfsmHUExZpb3xd0X8FVj2MSOxc1dRd-93i3zkmJVhgWH0r8p0Agtg6lc9_TB6srlXJF4MOWT3a_Cfy87W3FTKRzdCdsAEDOBkSL-JANDey4"
|
||||||
|
// .decodeBase64Url()
|
||||||
|
// println(src.toDump())
|
||||||
|
var res = byteArrayOf(0)
|
||||||
|
for( i in 1..100) {
|
||||||
|
res += byteArrayOf(i.toByte())
|
||||||
|
println(res.toDump())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user