函数

func copy(InputStream, OutputStream)

public func copy(from: InputStream, to!: OutputStream): Int64

功能:将一个输入流中未被读取的数据拷贝到另一个输出流中。

参数:

返回值:

  • Int64 - 拷贝数据的字节数。

示例:

import std.io.ByteBuffer
import std.io.copy

main(): Unit {
    let sourceStream = ByteBuffer()
    let targetStream = ByteBuffer()

    /* 向源输入流写入数据 */
    let sourceData = "Hello, World!".toArray()
    sourceStream.write(sourceData)

    /* 使用 copy 函数将源输入流的数据拷贝到目标输出流 */
    let copiedBytes = copy(sourceStream, to: targetStream)
    println("Copied ${copiedBytes} bytes.")

    /* 读取目标输出流中的数据 */
    let targetData: Array<Byte> = Array<Byte>(sourceData.size, repeat: 0)
    targetStream.read(targetData)
    println("Data copied to target stream: ${String.fromUtf8(targetData)}")
}

运行结果:

Copied 13 bytes.
Data copied to target stream: Hello, World!

func readString<T>(T) where T <: InputStream & Seekable

public func readString<T>(from: T): String where T <: InputStream & Seekable

功能:读取入参中的所有剩余内容,并返回一个字符串。

参数:

  • from: T - 要读取数据的对象。

返回值:

  • String - 读取到的结果字符串。

异常:

import std.io.ByteBuffer
import std.io.readString
import std.io.ContentFormatException

main(): Unit {
    let inputStream = ByteBuffer()

    /* 向输入流写入数据 */
    let sourceData = "Hello, World!".toArray()
    inputStream.write(sourceData)

    /* 使用 readString 函数读取输入流中的所有剩余内容 */
    try {
        let result = readString(inputStream)
        println("Read string: ${result}")
    } catch (e: ContentFormatException) {
        println("Error: ${e.message}")
    }

    /* 向输入流写入一个不合法的 UTF-8 字符串 */
    let sourceDataError: Array<UInt8> = [0xC3, 0x28, 0x48, 0x65, 0x6C, 0x6C, 0x6F]
    inputStream.write(sourceDataError)

    /* 使用 readString 函数读取输入流中的所有剩余内容 */
    try {
        let result = readString(inputStream)
        println("Read string: ${result}")
    } catch (e: ContentFormatException) {
        println("Error: ${e.message}")
    }
}

运行结果:

Read string: Hello, World!
Error: Invalid unicode scalar value.

func readStringUnchecked<T>(T) where T <: InputStream & Seekable

public unsafe func readStringUnchecked<T>(from: T): String where T <: InputStream & Seekable

功能:读取入参中的所有剩余内容,并返回一个字符串。该函数不会检查字符串的合法性。

参数:

  • from: T - 要读取数据的对象。

返回值:

  • String - 读取到的结果字符串。

示例:

import std.io.ByteBuffer
import std.io.readStringUnchecked
import std.io.ContentFormatException

main(): Unit {
    let inputStream = ByteBuffer()

    /* 向输入流写入数据 */
    let sourceData = "Hello, World!".toArray()
    inputStream.write(sourceData)

    /* 使用 readString 函数读取输入流中的所有剩余内容,可以正常输出:Read string: Hello, World! */
    unsafe {
        let result = readStringUnchecked(inputStream)
        println("Read string: ${result}")
    }

    /* 向输入流写入一个不合法的 UTF-8 字符串 */
    let sourceDataError: Array<UInt8> = [0xC3, 0x28, 0x48, 0x65, 0x6C, 0x6C, 0x6F]
    inputStream.write(sourceDataError)

    /* 使用 readString 函数读取输入流中的所有剩余内容,由于 inputStream 的第一位是不合法的UTF-8字符,所以将产生不可期的输出字符 */
    unsafe {
        let result = readStringUnchecked(inputStream)
        println("Read string: ${result}")
    }
}

func readToEnd<T>(T) where T <: InputStream & Seekable

public func readToEnd<T>(from: T): Array<Byte> where T <: InputStream & Seekable

功能:获取入参中未被读取的数据。

参数:

  • from: T - 要读取数据的对象。

返回值:

  • Array<Byte> - 未被读取的数据的拷贝。

示例:

import std.io.ByteBuffer
import std.io.readToEnd

main(): Unit {
    let inputStream = ByteBuffer()

    /* 向输入流写入数据 */
    let sourceData = "Hello, World!".toArray()
    inputStream.write(sourceData)

    /* 使用 readToEnd 函数读取输入流中的所有剩余内容 */
    let data = readToEnd(inputStream)
    println("${String.fromUtf8(data)}")
}

运行结果:

Hello, World!