io 包

介绍

io 包提供对字符串、缓冲区、字节数组等进行读写操作的流。

主要接口

interface InputStream

public interface InputStream {
    func read(buffer: Array<Byte>): Int64
}

接口 InputStream,输入流接口,继承该接口的 class、interface、struct 需要遵守该接口中函数的入参及返回值定义。

func read

func read(buffer: Array<Byte>): Int64

功能:从输入流中读取数据放到 buffer 中。没有数据可读,返回 0;读取失败,抛出异常。

参数:

  • buffer:读取数据存放的缓冲区,若 buffer 为空则抛出异常

返回值:读取成功,返回读取字节数

interface OutputStream

public interface OutputStream {
    func write(buffer: Array<Byte>): Unit
    func flush(): Unit
}

接口 OutputStream,输出流接口,继承该接口的 class、interface、struct 需要遵守该接口中函数的入参及返回值定义。

func write

func write(buffer: Array<Byte>): Unit

功能:将 buffer 中的数据写入到输出流中,当数据全部成功写入则函数返回,写入失败或者只写入了部分数据,则抛出异常。

参数:

  • buffer:待写入数据的缓冲区,若 buffer 为空则直接返回

func flush

func flush(): Unit

功能:清空缓存区,该函数提供默认实现,默认实现为空。

interface IOStream

public interface IOStream <: InputStream & OutputStream {}

接口 IOStream,输入输出流接口,继承该接口的 class、interface、struct 需要遵守该接口中函数的入参及返回值定义。

interface Seekable

public interface Seekable {
    func seek(sp: SeekPosition): Int64
    prop length: Int64
    prop position: Int64
    prop remainLength: Int64
}

接口 Seekable,移动光标接口,继承该接口的 class、interface、struct 需要遵守该接口中函数的入参及返回值定义。

func seek

func seek(sp: SeekPosition): Int64

参数:

  • sp:指定光标跳转后的位置

返回值:返回流中数据头部到跳转后位置的偏移量(以字节为单位)

prop length

prop length: Int64

功能:返回当前流中的总数据量。

prop remainLength

prop remainLength: Int64

功能:获取当前流中可读的数据量。

prop position

prop position: Int64

功能:获取流当前光标位置。

class IOException

public class IOException <: Exception {
    public init()
    public init(message: String)
}

异常处理类,继承了 Exception 类,用于处理 io 流相关的异常。

init

public init()

功能:创建 IOException 实例。

init

public init(message: String)

功能:创建带有异常信息 message 的 IOException 实例。

class ContentFormatException

public class ContentFormatException <: Exception

异常处理类,继承了 Exception 类,用于处理字符格式相关的异常。

enum SeekPosition

public enum SeekPosition {
    | Current(Int64)
    | Begin(Int64)
    | End(Int64)
}

SeekPosition 枚举类型表示光标在文件中的位置。

Current

Current(Int64)

功能:构造 SeekPosition 枚举实例,表示在当前实际位置基础上偏移后的位置,偏移量为入参值。

Begin

Begin(Int64)

功能:构造 SeekPosition 枚举实例,表示在文件开始位置基础上偏移后的位置,偏移量为入参值。

End

End(Int64)

功能:构造 SeekPosition 枚举实例,表示在文件结束位置基础上偏移后的位置,偏移量为入参值。

class ByteArrayStream

public class ByteArrayStream <: InputStream & OutputStream & Seekable {
    public init()
    public init(capacity: Int64)
}

此类基于 Array 数据类型,提供对字节流的写入、读取等操作。

init

public init()

功能:默认构造函数,默认的 capacity 是 32。

init

public init(capacity: Int64)

功能:使用传入的 capacity 初始化 ByteArrayStream。

参数:

  • capacity:指定的初始容量

异常:

  • IllegalArgumentException:当 capacity 小于 0 时,抛出异常

func seek

public func seek(sp: SeekPosition): Int64

功能:将光标跳转到指定位置,指定的位置不能位于流中数据头部之前,指定位置可以超过流中数据末尾。

参数:

  • sp:指定光标跳转后的位置

返回值:返回流中数据头部到跳转后位置的偏移量(以字节为单位)

异常:

  • IOException:指定的位置位于流中数据头部之前

prop length

public prop length: Int64

功能:返回当前流中的总数据量。

prop remainLength

public prop remainLength: Int64

功能:获取当前流中可读的数据量。

prop position

public prop position: Int64

功能:获取流当前光标位置。

func capacity

public func capacity(): Int64

功能:返回当前缓冲区总容量。

返回值:返回一个 Int64 类型的值

func isEmpty

public func isEmpty(): Bool

功能:返回当前 ByteArrayStream 中是否为空。

返回值:为空返回 true,否则返回 false

func clone

public func clone(): ByteArrayStream

功能:将当前 ByteArrayStream 中的数据拷贝一份,重新构造一个新的 ByteArrayStream。

返回值:拷贝的 ByteArrayStream

func clear

public func clear(): Unit

功能:清除掉当前 ByteArrayStream 中所有数据。

func bytes

public func bytes(): Array<Byte>

功能:返回当前 ByteArrayStream 中没有被读取的所有数据的切片。这个切片会在缓冲区进行读取,写入或重置等修改操作之后变的无效;同时,对切片的修改也会影响缓冲区的内容。

返回值:返回剩余数据的切片

func readToEnd

public func readToEnd(): Array<Byte>

功能:返回当前 ByteArrayStream 中没有被读取的所有数据。

返回值:返回剩余数据的拷贝

func copyTo

public func copyTo(output: OutputStream): Unit

功能:将当前 ByteArrayStream 中没有被读取的所有数据拷贝到 output 流中。

参数:

  • output:将要拷贝到的流

func read

public func read(buffer: Array<Byte>): Int64

功能:从输入流中读取数据放到 buffer 中。如果没有数据可读,返回 0 。读取失败,则抛出异常。

参数:

  • buffer:读取数据存放的缓冲区

返回值:读取成功,返回读取字节数

异常:

  • IllegalArgumentException:当 buffer 为空时, 抛出异常

func write

public func write(buffer: Array<Byte>): Unit

功能:将 buffer 中的数据写入到输出流中,当数据全部成功写入则函数返回。

参数:

  • buffer:待写入数据的缓冲区,若 buffer 为空则直接返回

异常:

  • IllegalArgumentException:如果 buffer 写入失败或者只写入了部分数据,则抛出异常

func reserve

public func reserve(additional: Int64): Unit

功能:将缓冲区扩容 additional 大小,缓冲区剩余字节数量大于等于 additional 时不发生扩容,当缓冲区剩余字节数量小于 additional 时,取(additional + capacity)与(capacity的1.5倍向下取整)两个值中的最大值进行扩容。

参数:

  • additional:将要扩容的大小

异常:

  • IllegalArgumentException:当 additional 小于 0 时抛出异常
  • OverflowException:当扩容后的缓冲区大小超过 Int64 的最大值时抛出异常

class BufferedInputStream

public class BufferedInputStream<T> <: InputStream where T <: InputStream {
    public init(input: T)
    public init(input: T, capacity: Int64)
}

此类用于为其他 InputStream 提供指定容量的缓冲区的功能。

init

public init(input: T)

功能:创建一个 BufferedInputStream 实例。

参数:

  • input:绑定一个输入流

init

public init(input: T, capacity: Int64)

功能:创建一个 BufferedInputStream 实例。

参数:

  • input:绑定一个输入流
  • capacity:内部缓冲区容量

异常:

  • IllegalArgumentException:当 capacity 小于等于 0 时,抛出异常

func read

public func read(buffer: Array<Byte>): Int64

功能:从绑定的输入流读出数据到 buffer 中。如果没有数据可读,返回 0 。读取失败,抛出异常。

参数:

  • buffer:存放读取的数据的缓冲区

返回值:读取成功,返回读取字节数

异常:

  • IllegalArgumentException:当 buffer 为空时, 抛出异常

func reset

public func reset(input: T): Unit

功能:绑定新的输入流,重置状态,但不重置 capacity。

参数:

  • input:待绑定的输入流

extend BufferedInputStream <: Resource

extend BufferedInputStream<T> <: Resource where T <: Resource

此扩展主要用于实现 BufferedInputStream 的 Resource 接口。

func close

public func close(): Unit

功能:关闭当前流。调用此方法后不可再调用 BufferedInputStream 的其他接口,否则会造成不可期现象。

func isClosed

public func isClosed(): Bool

功能:判断当前流是否关闭。

返回值:如果当前流已经被关闭,返回 true,否则返回 false

extend BufferedInputStream <: Seekable

extend BufferedInputStream<T> <: Seekable where T <: Seekable

此扩展主要用于实现 BufferedInputStream 的 Seekable 接口。

func seek

public func seek(sp: SeekPosition): Int64

功能:将光标跳转到指定位置,指定的位置不能位于流中数据头部之前,指定位置可以超过流中数据末尾。调用该函数会先清空流的缓存区,再移动光标的位置。

参数:

  • sp:指定光标跳转后的位置

返回值:返回流中数据头部到跳转后位置的偏移量(以字节为单位)

异常:

  • IOException:指定的位置位于流中数据头部之前

prop length

public prop length: Int64

功能:返回当前流中的总数据量。

prop remainLength

public prop remainLength: Int64

功能:获取当前流中可读的数据量。

prop position

public prop position: Int64

功能:获取流当前光标位置。

class BufferedOutputStream

public class BufferedOutputStream<T> <: OutputStream where T <: OutputStream  {
    public init(output: T)
    public init(output: T, capacity: Int64)
}

此类是用于为其他 OutputStream 提供指定容量的缓冲区的功能。

init

public init(output: T)

功能:创建一个 BufferedOutputStream 实例。

参数:

  • output:绑定一个输出流

init

public init(output: T, capacity: Int64)

功能:创建一个 BufferedOutputStream 实例。

参数:

  • output:绑定一个输出流
  • capacity:内部缓冲区容量

异常:

  • IllegalArgumentException:当 capacity 小于等于 0 时,抛出异常

func write

public func write(buffer: Array<Byte>): Unit

功能:将 buffer 中的数据写入到绑定的输出流中,当数据全部成功写入则函数返回,写入失败或者只写入了部分数据,则抛出异常。

参数:

  • buffer:待写入数据的缓冲区,若 buffer 为空则直接返回

func flush

public func flush(): Unit

功能:刷新 BufferedOutputStream:将内部缓冲区的剩余数据写入绑定的输出流,并刷新绑定的输出流。

func reset

public func reset(output: T): Unit

功能:绑定新的输出流,重置状态,但不重置 capacity。

参数:

  • output:待绑定的输出流

extend BufferedOutputStream <: Resource

extend BufferedOutputStream<T> <: Resource where T <: Resource

此扩展主要用于实现 BufferedOutputStream 的 Resource 接口。

func close

public func close(): Unit

功能:关闭当前流。调用此方法后不可再调用 BufferedOutputStream 的其他接口,否则会造成不可期现象。

func isClosed

public func isClosed(): Bool

功能:判断当前流是否关闭。

返回值:如果当前流已经被关闭,返回 true,否则返回 false

extend BufferedOutputStream <: Seekable

extend BufferedOutputStream<T> <: Seekable where T <: Seekable

此扩展主要用于实现 BufferedOutputStream 的 Seekable 接口。

func seek

public func seek(sp: SeekPosition): Int64

功能:将光标跳转到指定位置,指定的位置不能位于流中数据头部之前,指定位置可以超过流中数据末尾。调用该函数会先将缓存区内的数据写到绑定的输出流里,再移动光标的位置。

参数:

  • sp:指定光标跳转后的位置

返回值:返回流中数据头部到跳转后位置的偏移量(以字节为单位)

异常:

  • IOException:指定的位置位于流中数据头部之前

prop length

public prop length: Int64

功能:返回当前流中的总数据量。

prop remainLength

public prop remainLength: Int64

功能:获取当前流中可读的数据量。

prop position

public prop position: Int64

功能:获取流当前光标位置。

enum StringEncoding

public enum StringEncoding {
    | UTF8
    | UTF16
    | UTF32
}

StringEncoding 枚举类型表示字符串的编码格式。

UTF8

UTF8

UTF16

UTF16

UTF32

UTF32

enum Endian

public enum Endian {
    | Little
    | Big
}

Endian 枚举类型表示字节序,只对 UTF16、UTF32 有效。

Little

Little

功能:构造一个 Endian 枚举实例,表示小端字节序。

Big

Big

功能:构造一个 Endian 枚举实例,表示大端字节序。

CURRENT_ENDIAN

public let CURRENT_ENDIAN: Endian = getCurrentEndian()

功能:获取运行时所在系统的字节序。

func getCurrentEndian

public func getCurrentEndian(): Endian

功能:获取运行时所在系统的字节序。

class StringReader

public class StringReader<T> where T <: InputStream {
    public init(input: T, encoding!: StringEncoding = UTF8, endian!: Endian = CURRENT_ENDIAN)
}

提供从 InputStream 输入流中读出数据并转换成字符或字符串的功能

StringReader 内部默认有缓冲区,缓冲区容量 4096 个字节

StringReader 目前仅支持 UTF-8 编码,暂不支持 UTF-16、UTF-32

init

public init(input: T, encoding!: StringEncoding = UTF8, endian!: Endian = CURRENT_ENDIAN)

功能:创建一个 StringReader 实例。

参数:

  • input:待读取数据的输入流
  • encoding:指定 input 的编码格式,默认是 UTF-8 编码
  • endian:指定 input 的字节序配置,默认使用运行时所在系统的 endian 配置

异常:

  • IllegalArgumentException:当 encoding 传入 UTF16/UTF32 时抛出异常

func read

public func read(): ?Char

功能:按字符读,从流内读出单个字符流结束后再调用此函数,返回 Option.None。

返回值:读取成功,返回 Option.Some(c),c 为该次读出的字符

异常:

  • ContentFormatException:如果读取到不合法字符,则抛出异常

func readln

public func readln(): Option<String>

功能:按行读,从流内读出一行的字符串(尾部不含换行符)流结束后再调用此函数,返回 Option.None。

返回值:读取成功,返回 Option.Some(str),str 为该次读出的字符串

异常:

  • ContentFormatException:如果读取到不合法字符,则抛出异常

func readToEnd

public func readToEnd(): String

功能:从流内读出所有剩余数据,以字符串形式返回。

返回值:返回读出的字符串

异常:

  • ContentFormatException:如果读取到不合法字符,则抛出异常

func readUntil

public func readUntil(v: Char): Option<String>

功能:从流内读出到指定字符之前(包含指定字符)或者流结束位置之前的数据,以 Option 形式返回流结束后再调用此函数,返回 Option.None。

返回值:读取成功,返回 Option.Some(str),str 为该次读出的字符串

异常:

  • ContentFormatException:如果读取到不合法字符,则抛出异常

func readUntil

public func readUntil(predicate: (Char)->Bool): Option<String>

功能:从流内读出到使 predicate 返回 true 的字符位置之前(包含这个字符)或者流结束位置之前的数据,以 Option 形式返回流结束后再调用此函数,返回 Option.None。

返回值:读取成功,返回 Option.Some(str),str 为该次读出的字符串

异常:

  • ContentFormatException:如果读取到不合法字符,则抛出异常

extend StringReader <: Resource

extend StringReader<T> <: Resource where T <: Resource

此扩展主要用于实现 StringReader 的 Resource 接口。

func close

public func close(): Unit

功能:关闭当前流。调用此方法后不可再调用 StringReader 的其他接口,否则会造成不可期现象。

func isClosed

public func isClosed(): Bool

功能:判断当前流是否关闭。

返回值:如果当前流已经被关闭,返回 true,否则返回 false

extend StringReader <: Seekable

extend StringReader<T> <: Seekable where T <: Seekable

此扩展主要用于实现 StringReader 的 Seekable 接口。

func seek

public func seek(sp: SeekPosition): Int64

功能:将光标跳转到指定位置,指定的位置不能位于流中数据头部之前,指定位置可以超过流中数据末尾。

参数:

  • sp:指定光标跳转后的位置

返回值:返回流中数据头部到跳转后位置的偏移量(以字节为单位)

异常:

  • IOException:指定的位置位于流中数据头部之前

prop length

public prop length: Int64

功能:返回当前流中的总数据量。

prop remainLength

public prop remainLength: Int64

功能:获取当前流中可读的数据量。

prop position

public prop position: Int64

功能:获取流当前光标位置。

class StringWriter

public class StringWriter<T> where T <: OutputStream {
    public init(output: T, encoding!: StringEncoding = UTF8, endian!: Endian = CURRENT_ENDIAN)
}

提供将 String 以及一些 ToString 类型转换成指定编码格式和字节序配置的字符串并写入到输出流的功能。

StringWriter 内部默认有缓冲区,缓冲区容量 4096 个字节。

StringWriter 目前仅支持 UTF-8 编码,暂不支持 UTF-16、UTF-32。

init

public init(output: T, encoding!: StringEncoding = UTF8, endian!: Endian = CURRENT_ENDIAN)

功能:创建一个 StringWriter 实例。

参数:

  • output:待写入数据的输出流
  • encoding:指定 output 编码格式,默认是 UTF-8 编码
  • endian:指定 output 的字节序配置,默认使用运行时所在系统的 endian 配置

异常:

  • IllegalArgumentException:当 encoding 传入 UTF16/UTF32 时抛出异常

func flush

public func flush(): Unit

功能:刷新内部缓冲区,将缓冲区数据写入 output 中,并刷新 output。

func write

public func write(v: String): Unit

功能:写入字符串。

参数:

  • v:待写入的字符串

func write

public func write<T>(v: T): Unit where T <: ToString

功能:写入 ToString 类型。

参数:

  • v:ToString 类型的实例

func write

public func write(v: Bool): Unit

功能:写入 Bool 类型。

参数:

  • v:Bool 类型的实例

func write

public func write(v: Int8): Unit

功能:写入 Int8 类型。

参数:

  • v:Int8 类型的实例

func write

public func write(v: Int16): Unit

功能:写入 Int16 类型。

参数:

  • v:Int16 类型的实例

func write

public func write(v: Int32): Unit

功能:写入 Int32 类型。

参数:

  • v:Int32 类型的实例

func write

public func write(v: Int64): Unit

功能:写入 Int64 类型。

参数:

  • v:Int64 类型的实例

func write

public func write(v: UInt8): Unit

功能:写入 UInt8 类型。

参数:

  • v:UInt8 类型的实例

func write

public func write(v: UInt16): Unit

功能:写入 UInt16 类型。

参数:

  • v:UInt16 类型的实例

func write

public func write(v: UInt32): Unit

功能:写入 UInt32 类型。

参数:

  • v:UInt32 类型的实例

func write

public func write(v: UInt64): Unit

功能:写入 UInt64 类型。

参数:

  • v:UInt64 类型的实例

func write

public func write(v: Float16): Unit

功能:写入 Float16 类型。

参数:

  • v:Float16 类型的实例

func write

public func write(v: Float32): Unit

功能:写入 Float32 类型。

参数:

  • v:Float32 类型的实例

func write

public func write(v: Float64): Unit

功能:写入 Float64 类型。

参数:

  • v:Float64 类型的实例

func write

public func write(v: Char): Unit

功能:写入 Char 类型。

参数:

  • v:Char 类型的实例

func writeln

public func writeln(): Unit

功能:写入换行符。

func writeln

public func writeln(v: String): Unit

功能:写入字符串 + 换行符。

参数:

  • v:待写入的字符串

func writeln

public func writeln<T>(v: T): Unit where T <: ToString

功能:写入 ToString 类型 + 换行符。

参数:

  • v:ToString 类型的实例

func writeln

public func writeln(v: Bool): Unit

功能:写入 Bool 类型 + 换行符。

参数:

  • v:Bool 类型的实例

func writeln

public func writeln(v: Int8): Unit

功能:写入 Int8 类型 + 换行符。

参数:

  • v:Int8 类型的实例

func writeln

public func writeln(v: Int16): Unit

功能:写入 Int16 类型 + 换行符。

参数:

  • v:Int16 类型的实例

func writeln

public func writeln(v: Int32): Unit

功能:写入 Int32 类型 + 换行符。

参数:

  • v:Int32 类型的实例

func writeln

public func writeln(v: Int64): Unit

功能:写入 Int64 类型 + 换行符。

参数:

  • v:Int64 类型的实例

func writeln

public func writeln(v: UInt8): Unit

功能:写入 UInt8 类型 + 换行符。

参数:

  • v:UInt8 类型的实例

func writeln

public func writeln(v: UInt16): Unit

功能:写入 UInt16 类型 + 换行符。

参数:

  • v:UInt16 类型的实例

func writeln

public func writeln(v: UInt32): Unit

功能:写入 UInt32 类型 + 换行符。

参数:

  • v:UInt32 类型的实例

func writeln

public func writeln(v: UInt64): Unit

功能:写入 UInt64 类型 + 换行符。

参数:

  • v:UInt64 类型的实例

func writeln

public func writeln(v: Float16): Unit

功能:写入 Float16 类型 + 换行符。

参数:

  • v:Float16 类型的实例

func writeln

public func writeln(v: Float32): Unit

功能:写入 Float32 类型 + 换行符。

参数:

  • v:Float32 类型的实例

func writeln

public func writeln(v: Float64): Unit

功能:写入 Float64 类型 + 换行符。

参数:

  • v:Float64 类型的实例

func writeln

public func writeln(v: Char): Unit

功能:写入 Char 类型 + 换行符。

参数:

  • v:Char 类型的实例

extend StringWriter <: Resource

extend StringWriter<T> <: Resource where T <: Resource

此扩展主要用于实现 StringWriter 的 Resource 接口。

func close

public func close(): Unit

功能:关闭当前流。调用此方法后不可再调用 StringWriter 的其他接口,否则会造成不可期现象。

func isClosed

public func isClosed(): Bool

功能:判断当前流是否关闭。

返回值:如果当前流已经被关闭,返回 true,否则返回 false

extend StringWriter <: Seekable

extend StringWriter<T> <: Seekable where T <: Seekable

此扩展主要用于实现 StringWriter 的 Seekable 接口。

func seek

public func seek(sp: SeekPosition): Int64

功能:将光标跳转到指定位置,指定的位置不能位于流中数据头部之前,指定位置可以超过流中数据末尾。

参数:

  • sp:指定光标跳转后的位置

返回值:返回流中数据头部到跳转后位置的偏移量(以字节为单位)

异常:

  • IOException:指定的位置位于流中数据头部之前

prop length

public prop length: Int64

功能:返回当前流中的总数据量。

prop remainLength

public prop remainLength: Int64

功能:获取当前流中可读的数据量。

prop position

public prop position: Int64

功能:获取流当前光标位置。

class ChainedInputStream

public class ChainedInputStream <: InputStream {
    public init(input: Array<InputStream>)
}

此类提供了顺序从 InputStream 数组中读取数据的功能。

init

public init(input: Array<InputStream>)

功能:创建一个 ChainedInputStream 实例。

参数:

  • input:绑定一个输入流数组

异常:

  • IllegalArgumentException:当 input 为空时, 抛出异常

func read

public func read(buffer: Array<Byte>): Int64

功能:依次从绑定 InputStream 数组中读出数据到 buffer 中。若所有 InputStream 均已读完,则返回 0。

参数:

  • buffer:存储读出数据的缓冲区

返回值:读取成功,返回读取字节数

异常:

  • IllegalArgumentException:当 buffer 为空时, 抛出异常

class MultiOutputStream

public class MultiOutputStream <: OutputStream {
    public init(output: Array<OutputStream>)
}

此类提供了将数据同时写入到 OutputStream 数组中每个输出流中的功能。

init

public init(output: Array<OutputStream>)

功能:创建一个 MultiOutputStream 实例。

参数:

  • output:绑定一个输出流数组

异常:

  • IllegalArgumentException:当 output 为空时,抛出异常

func write

public func write(buffer: Array<Byte>): Unit

功能:将 buffer 同时写入到绑定的 OutputStream 数组里的每个输出流中。

参数:

  • buffer:存储待写入数据的缓冲区

func flush

public func flush(): Unit

功能:刷新绑定的输出流数组里的每个输出流。

func indexOf

public func indexOf(src: Array<Byte>, byte: Byte, start!: Int64 = 0): Option<Int64>

功能:查找字节 byte 在字节数组 src 中首次出现位置的下标。

参数:

  • src:要查找的字节数组
  • byte:待查找的字节
  • start:从 src 数组 start 位置开始查找,默认为 0

返回值:若查找到,返回 Some(下标位置),否则返回 None

异常:

  • IllegalArgumentException:当 start 小于 0 时, 抛出异常

func indexOf

public func indexOf(src: Array<Byte>, bytes: Array<Byte>, start!: Int64 = 0): Option<Int64>

功能:查找字节数组 bytes 在字节数组 src 中首次出现位置的下标。

参数:

  • src:要查找的字节数组
  • byte:待查找的字节数组,当 bytes 是空数组时,如果 start 大于 0,返回 None, 否则返回 Some(0)
  • start:从 src 数组 start 位置开始查找,默认为 0,当 start 小于零正常返回,当 start 大于等于原数组长度时返回 Option.None

返回值:若查找到,返回 Some(下标位置),否则返回 None

func trim

public func trim(src: Array<Byte>, trimBytes: Array<Byte>): Array<Byte>

功能:修剪 src 两侧的字节,如果 src 两侧的字节包含在 trimBytes 中就将其修剪掉,直到遇到第一个不包含在 trimBytes 中的字符。

参数:

  • src:待修剪的数组
  • byte:要修剪掉的字节的数组

返回值:修剪后的数组

示例

ByteArrayStream 示例

from std import io.*

main(): Unit {
    let arr1 = b"test case"
    let byteArrayStream = ByteArrayStream()

    /* 将 arr1 中的数据写入到流中 */
    byteArrayStream.write(arr1)

    /* 读取 4 个字节的数据到 arr2 中 */
    let arr2 = Array<Byte>(4, item: 0)
    byteArrayStream.read(arr2)
    println(String.fromUtf8(arr2))

    /* 将流的索引指向起点 */
    byteArrayStream.seek(Begin(0))

    /* 读取流中全部数据 */
    let arr3 = byteArrayStream.readToEnd()
    println(String.fromUtf8(arr3))
}

运行结果如下:

test
test case

BufferedInputStream 示例

from std import io.*

main(): Unit {
    let arr1 = b"0123456789"
    let byteArrayStream = ByteArrayStream()
    byteArrayStream.write(arr1)
    let bufferedInputStream = BufferedInputStream(byteArrayStream)
    let arr2 = Array<Byte>(20, item: 0)

    /* 读取流中数据,返回读取到的数据的长度 */
    let readLen = bufferedInputStream.read(arr2)
    println(String.fromUtf8(arr2[..readLen]))
}

运行结果如下:

0123456789

BufferedOutputStream 示例

from std import io.*

main(): Unit {
    let arr1 = b"01234"
    let byteArrayStream = ByteArrayStream()
    byteArrayStream.write(arr1)
    let bufferedInputStream = BufferedOutputStream(byteArrayStream)
    let arr2 = b"56789"

    /* 向流中写入数据,此时数据在外部流的缓冲区中 */
    bufferedInputStream.write(arr2)

    /* 调用 flush 函数,真正将数据写入内部流中 */
    bufferedInputStream.flush()
    println(String.fromUtf8(byteArrayStream.readToEnd()))
}

运行结果如下:

0123456789

ChainedInputStream 示例

from std import io.*
from std import collection.ArrayList

main(): Unit {
    const size = 2

    /* 创建两个 ByteArrayStream 并写入数据 */
    let streamArr = Array<InputStream>(size, {_ => ByteArrayStream()})
    for (i in 0..size) {
        match (streamArr[i]) {
            case v: OutputStream =>
                let str = "now ${i}"
                v.write(str.toArray())
            case _ => throw Exception()
        }
    }

    /* 将两个 ByteArrayStream 绑定到 ChainedInputStream */
    let chainedInputStream = ChainedInputStream(streamArr)
    let res = ArrayList<Byte>()
    let buffer = Array<Byte>(20, item: 0)
    var readLen = chainedInputStream.read(buffer)

    /* 循环读取 chainedInputStream 中数据 */
    while (readLen != 0) {
        res.appendAll(buffer[..readLen])
        readLen = chainedInputStream.read(buffer)
    }
    println(String.fromUtf8(res.toArray()))
}

运行结果如下:

now 0now 1

MultiOutputStream 示例

from std import io.*

main(): Unit {
    const size = 2

    /* 将两个 ByteArrayStream 绑定到 MultiOutputStream */
    let streamArr = Array<OutputStream>(size, {_ => ByteArrayStream()})
    let multiOutputStream = MultiOutputStream(streamArr)

    /* 往 MultiOutputStream 写入数据,会同时写入绑定的两个 ByteArrayStream */
    multiOutputStream.write(b"test")

    /* 读取 ByteArrayStream 中数据,验证结果 */
    for (i in 0..size) {
        match (streamArr[i]) {
            case v: ByteArrayStream =>
                println(String.fromUtf8(v.readToEnd()))
            case _ => throw Exception()
        }
    }
}

运行结果如下:

test
test

StringReader 示例

from std import io.*

main(): Unit {
    let arr1 = b"012\n346789"
    let byteArrayStream = ByteArrayStream()
    byteArrayStream.write(arr1)
    let stringReader = StringReader(byteArrayStream)

    /* 读取一个字节 */
    let ch = stringReader.read()
    println(ch ?? 'a')

    /* 读取一行数据 */
    let line = stringReader.readln()
    println(line ?? "error")

    /* 读取数据直到遇到字符6 */
    let until = stringReader.readUntil('6')
    println(until ?? "error")

    /* 读取全部数据 */
    let all = stringReader.readToEnd()
    println(all)
}

运行结果如下:

0
12
346
789

StringWriter 示例

from std import io.*

main(): Unit {
    let byteArrayStream = ByteArrayStream()
    let stringWriter = StringWriter(byteArrayStream)

    /* 写入字符串 */
    stringWriter.write("number")

    /* 写入字符串并自动转行 */
    stringWriter.writeln(" is:")

    /* 写入数字 */
    stringWriter.write(100.0f32)

    stringWriter.flush()

    println(String.fromUtf8(byteArrayStream.readToEnd()))
}

运行结果如下:

number is:
100.000000