All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.RawSink.kt Maven / Gradle / Ivy

There is a newer version: 0.5.4
Show newest version
/*
 * Copyright 2017-2024 JetBrains s.r.o. and respective authors and developers.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENCE file.
 */

/*
 * Copyright (C) 2019 Square, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package kotlinx.io

/**
 * Receives a stream of bytes. RawSink is a base interface for `kotlinx-io` data receivers.
 *
 * This interface should be implemented to write data wherever it's needed: to the network, storage,
 * or a buffer in memory. Sinks may be layered to transform received data, such as to compress, encrypt, throttle,
 * or add protocol framing.
 *
 * Most application code shouldn't operate on a raw sink directly, but rather on a buffered [Sink] which
 * is both more efficient and more convenient. Use [buffered] to wrap any raw sink with a buffer.
 *
 * Implementors should abstain from throwing exceptions other than those that are documented for RawSink methods.
 *
 * ### Thread-safety guarantees
 *
 * [RawSink] implementations are not required to be thread safe.
 * However, if an implementation provides some thread safety guarantees, it is recommended to explicitly document them.
 *
 * @sample kotlinx.io.samples.Crc32Sample.crc32
 */
public expect interface RawSink : AutoCloseable {
    /**
     * Removes [byteCount] bytes from [source] and appends them to this sink.
     *
     * @param source the source to read data from.
     * @param byteCount the number of bytes to write.
     *
     * @throws IllegalArgumentException when the [source]'s size is below [byteCount] or [byteCount] is negative.
     * @throws IllegalStateException when the sink is closed.
     * @throws IOException when some I/O error occurs.
     */
    public fun write(source: Buffer, byteCount: Long)

    /**
     * Pushes all buffered bytes to their final destination.
     *
     * @throws IllegalStateException when the sink is closed.
     * @throws IOException when some I/O error occurs.
     */
    public fun flush()

    /**
     * Pushes all buffered bytes to their final destination and releases the resources held by this
     * sink. It is an error to write a closed sink. It is safe to close a sink more than once.
     *
     * @throws IOException when some I/O error occurs.
     */
    override fun close()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy