A multiplatform Kotlin library providing basic IO primitives. kotlinx-io
is based on Okio but does not preserve backward compatibility with it.
kotlinx-io is built around Buffer
- a mutable sequence of bytes.
Buffer
works like a queue, allowing to read data from its head or to write data to its tail.
Buffer
provides functions to read and write data of different built-in types, and to copy data to or from other Buffer
s.
Depending on the target platform, extension functions allowing data exchange with platform-specific types are also available.
A Buffer
consists of segments organized as a linked list: segments allow reducing memory allocations during the buffer's expansion and copy,
with the latter achieved by delegating or sharing the ownership over the underlying buffer's segments with other buffers.
kotlinx-io provides interfaces representing data sources and destinations - Source
and Sink
,
and in addition to the mutable Buffer
the library also provides an immutable sequence of bytes - ByteString
.
An experimental filesystem support is shipped under the kotlinx.io.files
package,
which includes the FileSystem
interface and its default implementation - SystemFileSystem
.
FileSystem
provides basic operations for working with files and directories, which are represented by yet another class under the same package - Path
.
There are two kotlinx-io
modules:
- kotlinx-io-bytestring - provides
ByteString
. - kotlinx-io-core - provides IO primitives (
Buffer
,Source
,Sink
), filesystems support, depends onkotlinx-io-bytestring
.
Note that the library is experimental, and the API is subject to change.
Make sure that you have mavenCentral()
in the list of repositories:
repositories {
mavenCentral()
}
Add the library to dependencies:
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-io-core:0.6.0")
}
In multiplatform projects, add a dependency to the commonMain
source set dependencies:
kotlin {
sourceSets {
commonMain {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-io-core:0.6.0")
}
}
}
}
Add the library to dependencies:
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-io-core-jvm</artifactId>
<version>0.6.0</version>
</dependency>
On JVM, kotlinx-io
supports Java Modules:
kotlinx-io-bytestring
library provideskotlinx.io.bytestring
module;kotlinx-io-core
library provideskotlinx.io.core
module.
Read this article for details on how to configure a Gradle project to utilize JPMS.
kotlinx-io
is not tested on Android on a regular basis,
but the library is compatible with Android 5.0+ (API level 21+).
Read the Contributing Guidelines.
This project and the corresponding community are governed by the JetBrains Open Source and Community Code of Conduct. Please make sure you read it.
kotlinx-io is licensed under the Apache 2.0 License.
Thanks to everyone involved in the project.
An honorable mention goes to the developers of Okio
that served as the foundation for kotlinx-io
and to Jesse Wilson,
for the help with Okio
adaption, his suggestions, assistance and guidance with kotlinx-io
development.